commit 9160e861e06327ca8995c72e5ae1d4e231763468 Author: Piotr Kus Date: Thu Sep 17 21:45:57 2026 +0200 Initial commit diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..4aab439 Binary files /dev/null and b/.DS_Store differ diff --git a/BookieApi/.DS_Store b/BookieApi/.DS_Store new file mode 100644 index 0000000..3165323 Binary files /dev/null and b/BookieApi/.DS_Store differ diff --git a/BookieApi/.idea/.idea.Bookie/.idea/.gitignore b/BookieApi/.idea/.idea.Bookie/.idea/.gitignore new file mode 100644 index 0000000..a0e9f85 --- /dev/null +++ b/BookieApi/.idea/.idea.Bookie/.idea/.gitignore @@ -0,0 +1,15 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/contentModel.xml +/projectSettingsUpdater.xml +/.idea.Bookie.iml +/modules.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/BookieApi/.idea/.idea.Bookie/.idea/.name b/BookieApi/.idea/.idea.Bookie/.idea/.name new file mode 100644 index 0000000..8179640 --- /dev/null +++ b/BookieApi/.idea/.idea.Bookie/.idea/.name @@ -0,0 +1 @@ +Bookie \ No newline at end of file diff --git a/BookieApi/.idea/.idea.Bookie/.idea/encodings.xml b/BookieApi/.idea/.idea.Bookie/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/BookieApi/.idea/.idea.Bookie/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/BookieApi/.idea/.idea.Bookie/.idea/indexLayout.xml b/BookieApi/.idea/.idea.Bookie/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/BookieApi/.idea/.idea.Bookie/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/BookieApi/.idea/.idea.Bookie/.idea/vcs.xml b/BookieApi/.idea/.idea.Bookie/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/BookieApi/.idea/.idea.Bookie/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BookieApi/Bookie.slnx b/BookieApi/Bookie.slnx new file mode 100644 index 0000000..3ae70d0 --- /dev/null +++ b/BookieApi/Bookie.slnx @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/BookieApi/nuget.config b/BookieApi/nuget.config new file mode 100644 index 0000000..4d736c1 --- /dev/null +++ b/BookieApi/nuget.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/BookieApi/src/.DS_Store b/BookieApi/src/.DS_Store new file mode 100644 index 0000000..b2d596d Binary files /dev/null and b/BookieApi/src/.DS_Store differ diff --git a/BookieApi/src/Bookie.Api/Bookie.Api.csproj b/BookieApi/src/Bookie.Api/Bookie.Api.csproj new file mode 100644 index 0000000..c3edeae --- /dev/null +++ b/BookieApi/src/Bookie.Api/Bookie.Api.csproj @@ -0,0 +1,20 @@ + + + + net10.0 + enable + enable + + + + + + + + + + + + + + diff --git a/BookieApi/src/Bookie.Api/Bookie.Api.http b/BookieApi/src/Bookie.Api/Bookie.Api.http new file mode 100644 index 0000000..b53b3ad --- /dev/null +++ b/BookieApi/src/Bookie.Api/Bookie.Api.http @@ -0,0 +1,6 @@ +@Bookie.Api_HostAddress = http://localhost:5210 + +GET {{Bookie.Api_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/BookieApi/src/Bookie.Api/Controllers/AuthController.cs b/BookieApi/src/Bookie.Api/Controllers/AuthController.cs new file mode 100644 index 0000000..1ea4de9 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/AuthController.cs @@ -0,0 +1,36 @@ +using Bookie.Application.DTOs.Auth; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[ApiController] +[Route("api/auth")] +public class AuthController : ControllerBase +{ + private readonly IAuthService _auth; + + public AuthController(IAuthService auth) => _auth = auth; + + /// Exchange username/password for a JWT. + [HttpPost("login")] + [AllowAnonymous] + [ProducesResponseType(typeof(AuthResponseDto), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + public ActionResult Login([FromBody] LoginRequestDto request) + { + var result = _auth.Login(request); + return result is null ? Unauthorized(new { message = "Invalid credentials." }) : Ok(result); + } + + /// Returns the current user's identity from the token. + [HttpGet("me")] + [Authorize] + public ActionResult Me() + => Ok(new + { + username = User.Identity?.Name, + role = User.FindFirst(System.Security.Claims.ClaimTypes.Role)?.Value + }); +} diff --git a/BookieApi/src/Bookie.Api/Controllers/CrudControllerBase.cs b/BookieApi/src/Bookie.Api/Controllers/CrudControllerBase.cs new file mode 100644 index 0000000..d691004 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/CrudControllerBase.cs @@ -0,0 +1,54 @@ +using Bookie.Application.DTOs.Common; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +/// +/// Shared CRUD endpoints. Reads require any authenticated user; writes require the admin role. +/// +[ApiController] +[Authorize] +public abstract class CrudControllerBase : ControllerBase +{ + protected readonly ICrudService Service; + + protected CrudControllerBase(ICrudService service) => Service = service; + + /// Paged list with optional search + sorting. + [HttpGet] + public async Task>> GetPaged([FromQuery] PagedQuery query, CancellationToken ct) + => Ok(await Service.GetPagedAsync(query, ct)); + + [HttpGet("{id:int}")] + public async Task> GetById(int id, CancellationToken ct) + { + var item = await Service.GetByIdAsync(id, ct); + return item is null ? NotFound() : Ok(item); + } + + [HttpPost] + [Authorize(Roles = "admin")] + public async Task> Create([FromBody] TCreate dto, CancellationToken ct) + { + var created = await Service.CreateAsync(dto, ct); + return StatusCode(StatusCodes.Status201Created, created); + } + + [HttpPut("{id:int}")] + [Authorize(Roles = "admin")] + public async Task> Update(int id, [FromBody] TUpdate dto, CancellationToken ct) + { + var updated = await Service.UpdateAsync(id, dto, ct); + return updated is null ? NotFound() : Ok(updated); + } + + [HttpDelete("{id:int}")] + [Authorize(Roles = "admin")] + public async Task Delete(int id, CancellationToken ct) + { + var ok = await Service.DeleteAsync(id, ct); + return ok ? NoContent() : NotFound(); + } +} diff --git a/BookieApi/src/Bookie.Api/Controllers/DashboardController.cs b/BookieApi/src/Bookie.Api/Controllers/DashboardController.cs new file mode 100644 index 0000000..efe5942 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/DashboardController.cs @@ -0,0 +1,21 @@ +using Bookie.Application.DTOs.Dashboard; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[ApiController] +[Route("api/dashboard")] +[Authorize] +public class DashboardController : ControllerBase +{ + private readonly IDashboardService _dashboard; + + public DashboardController(IDashboardService dashboard) => _dashboard = dashboard; + + [HttpGet("summary")] + [ProducesResponseType(typeof(DashboardSummaryDto), StatusCodes.Status200OK)] + public async Task> GetSummary(CancellationToken ct) + => Ok(await _dashboard.GetSummaryAsync(ct)); +} diff --git a/BookieApi/src/Bookie.Api/Controllers/LeaguesController.cs b/BookieApi/src/Bookie.Api/Controllers/LeaguesController.cs new file mode 100644 index 0000000..9afd81b --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/LeaguesController.cs @@ -0,0 +1,11 @@ +using Bookie.Application.DTOs.Leagues; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[Route("api/leagues")] +public class LeaguesController : CrudControllerBase +{ + public LeaguesController(ILeagueService service) : base(service) { } +} diff --git a/BookieApi/src/Bookie.Api/Controllers/LookupsController.cs b/BookieApi/src/Bookie.Api/Controllers/LookupsController.cs new file mode 100644 index 0000000..d3b5497 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/LookupsController.cs @@ -0,0 +1,36 @@ +using Bookie.Application.DTOs.Common; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[ApiController] +[Route("api/lookups")] +[Authorize] +public class LookupsController : ControllerBase +{ + private readonly ILookupService _lookups; + + public LookupsController(ILookupService lookups) => _lookups = lookups; + + [HttpGet("leagues")] + public async Task>> Leagues(CancellationToken ct) + => Ok(await _lookups.LeaguesAsync(ct)); + + [HttpGet("seasons")] + public async Task>> Seasons([FromQuery] int? leagueId, CancellationToken ct) + => Ok(await _lookups.SeasonsAsync(leagueId, ct)); + + [HttpGet("teams")] + public async Task>> Teams([FromQuery] int? leagueId, [FromQuery] int? seasonId, CancellationToken ct) + => Ok(await _lookups.TeamsAsync(leagueId, seasonId, ct)); + + [HttpGet("players")] + public async Task>> Players(CancellationToken ct) + => Ok(await _lookups.PlayersAsync(ct)); + + [HttpGet("matchdays")] + public async Task>> Matchdays(CancellationToken ct) + => Ok(await _lookups.MatchdaysAsync(ct)); +} diff --git a/BookieApi/src/Bookie.Api/Controllers/MatchesController.cs b/BookieApi/src/Bookie.Api/Controllers/MatchesController.cs new file mode 100644 index 0000000..44d5f98 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/MatchesController.cs @@ -0,0 +1,11 @@ +using Bookie.Application.DTOs.Matches; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[Route("api/matches")] +public class MatchesController : CrudControllerBase +{ + public MatchesController(IMatchService service) : base(service) { } +} diff --git a/BookieApi/src/Bookie.Api/Controllers/PlayerContractsController.cs b/BookieApi/src/Bookie.Api/Controllers/PlayerContractsController.cs new file mode 100644 index 0000000..e003b6b --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/PlayerContractsController.cs @@ -0,0 +1,18 @@ +using Bookie.Application.DTOs.Contracts; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[Route("api/player-contracts")] +public class PlayerContractsController : CrudControllerBase +{ + private readonly IPlayerContractService _contracts; + + public PlayerContractsController(IPlayerContractService service) : base(service) => _contracts = service; + + /// All contracts for a given player. + [HttpGet("by-player/{playerId:int}")] + public async Task>> GetByPlayer(int playerId, CancellationToken ct) + => Ok(await _contracts.GetByPlayerAsync(playerId, ct)); +} diff --git a/BookieApi/src/Bookie.Api/Controllers/PlayersController.cs b/BookieApi/src/Bookie.Api/Controllers/PlayersController.cs new file mode 100644 index 0000000..2638c43 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/PlayersController.cs @@ -0,0 +1,11 @@ +using Bookie.Application.DTOs.Players; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[Route("api/players")] +public class PlayersController : CrudControllerBase +{ + public PlayersController(IPlayerService service) : base(service) { } +} diff --git a/BookieApi/src/Bookie.Api/Controllers/PredictionsController.cs b/BookieApi/src/Bookie.Api/Controllers/PredictionsController.cs new file mode 100644 index 0000000..9c98884 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/PredictionsController.cs @@ -0,0 +1,77 @@ +using Bookie.Application.DTOs.Predictions; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[ApiController] +[Route("api/predictions")] +[Authorize] +public class PredictionsController : ControllerBase +{ + private readonly IPredictionService _service; + private readonly ILogger _logger; + + public PredictionsController(IPredictionService service, ILogger logger) + { + _service = service; + _logger = logger; + } + + /// + /// Statistical projection (goals, cards, fouls, corners, shots on target) for a single + /// fixture, produced by the OpenAI-backed Football Match Statistics Predictor. + /// + [HttpPost("match/{matchId:int}")] + [ProducesResponseType(typeof(MatchPredictionDto), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status502BadGateway)] + public async Task> PredictMatch(int matchId, CancellationToken ct) + { + try + { + var prediction = await _service.PredictMatchAsync(matchId, ct); + return prediction is null ? NotFound() : Ok(prediction); + } + catch (InvalidOperationException ex) + { + // Configuration or upstream OpenAI failures — surface a clean message to the client. + _logger.LogError(ex, "Prediction failed for match {MatchId}", matchId); + return Problem(title: "Prediction unavailable", detail: ex.Message, statusCode: StatusCodes.Status502BadGateway); + } + } + + /// + /// Batch projection for several fixtures in a single model call. The predictor prompt is + /// batch-oriented, so this produces consistent, cross-checked estimates across the selection. + /// + [HttpPost("matches")] + [ProducesResponseType(typeof(IEnumerable), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status502BadGateway)] + public async Task>> PredictMatches( + [FromBody] PredictMatchesRequest request, CancellationToken ct) + { + if (request?.MatchIds is null || request.MatchIds.Count == 0) + return BadRequest("Provide at least one match id."); + if (request.MatchIds.Count > 20) + return BadRequest("A maximum of 20 matches can be predicted per request."); + + try + { + var predictions = await _service.PredictMatchesAsync(request.MatchIds, ct); + return Ok(predictions); + } + catch (InvalidOperationException ex) + { + _logger.LogError(ex, "Batch prediction failed for {Count} matches", request.MatchIds.Count); + return Problem(title: "Prediction unavailable", detail: ex.Message, statusCode: StatusCodes.Status502BadGateway); + } + } + + public class PredictMatchesRequest + { + public List MatchIds { get; set; } = new(); + } +} diff --git a/BookieApi/src/Bookie.Api/Controllers/ReportsController.cs b/BookieApi/src/Bookie.Api/Controllers/ReportsController.cs new file mode 100644 index 0000000..cd9fb60 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/ReportsController.cs @@ -0,0 +1,57 @@ +using Bookie.Application.DTOs.Reports; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[ApiController] +[Route("api/reports")] +[Authorize] +public class ReportsController : ControllerBase +{ + private readonly IPreMatchReportService _service; + + public ReportsController(IPreMatchReportService service) => _service = service; + + /// + /// Pre-Match Report: all matches on the given date grouped by league/country/season, + /// with per-team historical stats computed only from earlier matches in the same season. + /// + /// Target day in YYYY-MM-DD. Defaults to today. + /// + /// How many previous seasons of the same league to fold into the stats. + /// 0 (default) = current season only; 1 = current + previous, etc. + /// + [HttpGet("pre-match")] + [ProducesResponseType(typeof(PreMatchReportDto), StatusCodes.Status200OK)] + public async Task> GetPreMatch( + [FromQuery] DateOnly? date, [FromQuery] int seasonsBack = 0, CancellationToken ct = default) + { + var target = date ?? DateOnly.FromDateTime(DateTime.Today); + var report = await _service.GetPreMatchReportAsync(target, seasonsBack, ct); + return Ok(report); + } + + /// Full statistics for a single match (team stats, goals, cards, penalties). + [HttpGet("match/{matchId:int}")] + [ProducesResponseType(typeof(MatchDetailsDto), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + public async Task> GetMatchDetails(int matchId, CancellationToken ct) + { + var details = await _service.GetMatchDetailsAsync(matchId, ct); + return details is null ? NotFound() : Ok(details); + } + + /// Historical head-to-head record between two teams (previous meetings before a given match). + [HttpGet("head-to-head")] + [ProducesResponseType(typeof(HeadToHeadDto), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + public async Task> GetHeadToHead( + [FromQuery] int teamAId, [FromQuery] int teamBId, + [FromQuery] int? beforeMatchId, CancellationToken ct) + { + var h2h = await _service.GetHeadToHeadAsync(teamAId, teamBId, beforeMatchId, ct); + return h2h is null ? NotFound() : Ok(h2h); + } +} diff --git a/BookieApi/src/Bookie.Api/Controllers/SeasonsController.cs b/BookieApi/src/Bookie.Api/Controllers/SeasonsController.cs new file mode 100644 index 0000000..c83b296 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/SeasonsController.cs @@ -0,0 +1,18 @@ +using Bookie.Application.DTOs.Seasons; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[Route("api/seasons")] +public class SeasonsController : CrudControllerBase +{ + private readonly ISeasonService _seasons; + + public SeasonsController(ISeasonService service) : base(service) => _seasons = service; + + /// All seasons for a given league (for dropdowns). + [HttpGet("by-league/{leagueId:int}")] + public async Task>> GetByLeague(int leagueId, CancellationToken ct) + => Ok(await _seasons.GetByLeagueAsync(leagueId, ct)); +} diff --git a/BookieApi/src/Bookie.Api/Controllers/StatsController.cs b/BookieApi/src/Bookie.Api/Controllers/StatsController.cs new file mode 100644 index 0000000..49c72c2 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/StatsController.cs @@ -0,0 +1,35 @@ +using Bookie.Application.DTOs.Stats; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[ApiController] +[Authorize] +public class StatsController : ControllerBase +{ + private readonly IStatsService _service; + + public StatsController(IStatsService service) => _service = service; + + /// Aggregated career statistics for a single player (goals, assists, cards, per-season, recent goals). + [HttpGet("api/players/{playerId:int}/stats")] + [ProducesResponseType(typeof(PlayerStatsDto), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + public async Task> GetPlayerStats(int playerId, CancellationToken ct) + { + var stats = await _service.GetPlayerStatsAsync(playerId, ct); + return stats is null ? NotFound() : Ok(stats); + } + + /// Aggregated statistics for a single team (record, averages, form, top scorers, per-season, recent matches). + [HttpGet("api/teams/{teamId:int}/stats")] + [ProducesResponseType(typeof(TeamStatsDto), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + public async Task> GetTeamStats(int teamId, CancellationToken ct) + { + var stats = await _service.GetTeamStatsAsync(teamId, ct); + return stats is null ? NotFound() : Ok(stats); + } +} diff --git a/BookieApi/src/Bookie.Api/Controllers/TeamsController.cs b/BookieApi/src/Bookie.Api/Controllers/TeamsController.cs new file mode 100644 index 0000000..2625789 --- /dev/null +++ b/BookieApi/src/Bookie.Api/Controllers/TeamsController.cs @@ -0,0 +1,18 @@ +using Bookie.Application.DTOs.Teams; +using Bookie.Application.Interfaces; +using Microsoft.AspNetCore.Mvc; + +namespace Bookie.Api.Controllers; + +[Route("api/teams")] +public class TeamsController : CrudControllerBase +{ + private readonly ITeamService _teams; + + public TeamsController(ITeamService service) : base(service) => _teams = service; + + /// Unpaged list of all teams (for dropdowns). + [HttpGet("all")] + public async Task>> GetAll(CancellationToken ct) + => Ok(await _teams.GetAllAsync(ct)); +} diff --git a/BookieApi/src/Bookie.Api/Program.cs b/BookieApi/src/Bookie.Api/Program.cs new file mode 100644 index 0000000..4f99e2f --- /dev/null +++ b/BookieApi/src/Bookie.Api/Program.cs @@ -0,0 +1,97 @@ +using System.Text; +using System.Text.Json.Serialization; +using Bookie.Infrastructure; +using Bookie.Infrastructure.Auth; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.IdentityModel.Tokens; +using Microsoft.OpenApi; + +// The bookie schema mixes plain `timestamp` and `timestamp with time zone` columns +// (e.g. kickoff_at is timestamptz in the live DB). Legacy behavior lets Npgsql accept +// Local/Unspecified DateTime kinds for both, so date-range filters work without casting. +// Must be set before the Npgsql data source is built. +AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); +AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", false); + +var builder = WebApplication.CreateBuilder(args); + +const string CorsPolicy = "BookieClient"; + +builder.Services.AddControllers() + .AddJsonOptions(o => + { + // Serialize enums as strings and keep DateOnly/DateTime in ISO form. + o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); + }); + +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(c => +{ + c.SwaggerDoc("v1", new OpenApiInfo + { + Title = "Bookie API", + Version = "v1", + Description = "Football stats API over the PostgreSQL \"bookie\" schema. " + + "Includes the Pre-Match Report feature plus CRUD for the core entities." + }); + + c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme + { + Name = "Authorization", + Type = SecuritySchemeType.Http, + Scheme = "bearer", + BearerFormat = "JWT", + In = ParameterLocation.Header, + Description = "Enter the JWT returned by /api/auth/login." + }); + c.AddSecurityRequirement(doc => new OpenApiSecurityRequirement + { + [new OpenApiSecuritySchemeReference("Bearer", doc)] = new List() + }); +}); + +// Infrastructure: EF Core (Npgsql) + services + auth options. +builder.Services.AddBookieInfrastructure(builder.Configuration); + +// JWT authentication. +var jwtOptions = builder.Configuration.GetSection(JwtOptions.SectionName).Get() ?? new JwtOptions(); +builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddJwtBearer(options => + { + options.TokenValidationParameters = new TokenValidationParameters + { + ValidateIssuer = true, + ValidateAudience = true, + ValidateLifetime = true, + ValidateIssuerSigningKey = true, + ValidIssuer = jwtOptions.Issuer, + ValidAudience = jwtOptions.Audience, + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.Secret)), + ClockSkew = TimeSpan.FromMinutes(1) + }; + }); +builder.Services.AddAuthorization(); + +builder.Services.AddCors(options => + options.AddPolicy(CorsPolicy, policy => policy + .WithOrigins(builder.Configuration.GetSection("Cors:AllowedOrigins").Get() + ?? new[] { "http://localhost:4200" }) + .AllowAnyHeader() + .AllowAnyMethod())); + +var app = builder.Build(); + +app.UseSwagger(); +app.UseSwaggerUI(c => +{ + c.SwaggerEndpoint("/swagger/v1/swagger.json", "Bookie API v1"); + c.RoutePrefix = "swagger"; +}); + +app.UseCors(CorsPolicy); +app.UseAuthentication(); +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); diff --git a/BookieApi/src/Bookie.Api/Properties/launchSettings.json b/BookieApi/src/Bookie.Api/Properties/launchSettings.json new file mode 100644 index 0000000..ea1154e --- /dev/null +++ b/BookieApi/src/Bookie.Api/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5210", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7228;http://localhost:5210", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/BookieApi/src/Bookie.Api/appsettings.Development.json b/BookieApi/src/Bookie.Api/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/BookieApi/src/Bookie.Api/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/BookieApi/src/Bookie.Api/appsettings.json b/BookieApi/src/Bookie.Api/appsettings.json new file mode 100644 index 0000000..db2f779 --- /dev/null +++ b/BookieApi/src/Bookie.Api/appsettings.json @@ -0,0 +1,32 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "BookieDb": "Host=158.220.99.25;Port=5432;Database=modwad;Username=trent;Password=QQVWG3DE5DHD2OWS3PRFKABOQJT55ACBEELK47FO275SVRCOP3GQ====;Search Path=bookie" + }, + "Jwt": { + "Issuer": "BookieApi", + "Audience": "BookieClient", + "Secret": "CHANGE_ME_super_secret_key_at_least_32_chars_long_1234567890", + "ExpiryMinutes": 480 + }, + "AuthUsers": { + "Users": [ + { "Username": "admin", "Password": "admin123", "Role": "admin" }, + { "Username": "user", "Password": "user123", "Role": "user" } + ] + }, + "Cors": { + "AllowedOrigins": [ "http://localhost:4200" ] + }, + "OpenAI": { + "ApiKey": "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", + "Model": "gpt-5.6-luna", + "BaseUrl": "https://api.openai.com/v1" + } +} diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api new file mode 100755 index 0000000..4288769 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.deps.json b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.deps.json new file mode 100644 index 0000000..7361ea5 --- /dev/null +++ b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.deps.json @@ -0,0 +1,421 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v10.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v10.0": { + "Bookie.Api/1.0.0": { + "dependencies": { + "Bookie.Application": "1.0.0", + "Bookie.Infrastructure": "1.0.0", + "Microsoft.AspNetCore.Authentication.JwtBearer": "10.0.11", + "Microsoft.AspNetCore.OpenApi": "10.0.5", + "Swashbuckle.AspNetCore": "10.2.3" + }, + "runtime": { + "Bookie.Api.dll": {} + } + }, + "Microsoft.AspNetCore.Authentication.JwtBearer/10.0.11": { + "dependencies": { + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.19.2" + }, + "runtime": { + "lib/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll": { + "assemblyVersion": "10.0.11.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Microsoft.AspNetCore.OpenApi/10.0.5": { + "dependencies": { + "Microsoft.OpenApi": "2.7.5" + }, + "runtime": { + "lib/net10.0/Microsoft.AspNetCore.OpenApi.dll": { + "assemblyVersion": "10.0.5.0", + "fileVersion": "10.0.526.15411" + } + } + }, + "Microsoft.Bcl.Cryptography/10.0.2": { + "runtime": { + "lib/net10.0/Microsoft.Bcl.Cryptography.dll": { + "assemblyVersion": "10.0.0.2", + "fileVersion": "10.0.225.61305" + } + } + }, + "Microsoft.EntityFrameworkCore/10.0.4": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.4" + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.4": { + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.4": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "10.0.4" + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.IdentityModel.Abstractions/8.22.0": { + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Abstractions.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Microsoft.IdentityModel.JsonWebTokens/8.22.0": { + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.22.0" + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Microsoft.IdentityModel.Logging/8.22.0": { + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "8.22.0" + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Logging.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Microsoft.IdentityModel.Protocols/8.19.2": { + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.22.0" + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Protocols.dll": { + "assemblyVersion": "8.19.2.0", + "fileVersion": "8.19.2.26195" + } + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect/8.19.2": { + "dependencies": { + "Microsoft.IdentityModel.Protocols": "8.19.2", + "System.IdentityModel.Tokens.Jwt": "8.22.0" + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": { + "assemblyVersion": "8.19.2.0", + "fileVersion": "8.19.2.26195" + } + } + }, + "Microsoft.IdentityModel.Tokens/8.22.0": { + "dependencies": { + "Microsoft.Bcl.Cryptography": "10.0.2", + "Microsoft.IdentityModel.Logging": "8.22.0" + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Tokens.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Microsoft.OpenApi/2.7.5": { + "runtime": { + "lib/net8.0/Microsoft.OpenApi.dll": { + "assemblyVersion": "2.7.5.0", + "fileVersion": "2.7.5.0" + } + } + }, + "Npgsql/10.0.3": { + "runtime": { + "lib/net10.0/Npgsql.dll": { + "assemblyVersion": "10.0.3.0", + "fileVersion": "10.0.3.0" + } + } + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/10.0.3": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "10.0.4", + "Microsoft.EntityFrameworkCore.Relational": "10.0.4", + "Npgsql": "10.0.3" + }, + "runtime": { + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": { + "assemblyVersion": "10.0.3.0", + "fileVersion": "10.0.3.0" + } + } + }, + "Swashbuckle.AspNetCore/10.2.3": { + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "10.2.3", + "Swashbuckle.AspNetCore.SwaggerGen": "10.2.3", + "Swashbuckle.AspNetCore.SwaggerUI": "10.2.3" + } + }, + "Swashbuckle.AspNetCore.Swagger/10.2.3": { + "dependencies": { + "Microsoft.OpenApi": "2.7.5" + }, + "runtime": { + "lib/net10.0/Swashbuckle.AspNetCore.Swagger.dll": { + "assemblyVersion": "10.2.3.0", + "fileVersion": "10.2.3.2721" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerGen/10.2.3": { + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "10.2.3" + }, + "runtime": { + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { + "assemblyVersion": "10.2.3.0", + "fileVersion": "10.2.3.2721" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerUI/10.2.3": { + "runtime": { + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { + "assemblyVersion": "10.2.3.0", + "fileVersion": "10.2.3.2721" + } + } + }, + "System.IdentityModel.Tokens.Jwt/8.22.0": { + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "8.22.0", + "Microsoft.IdentityModel.Tokens": "8.22.0" + }, + "runtime": { + "lib/net10.0/System.IdentityModel.Tokens.Jwt.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Bookie.Application/1.0.0": { + "dependencies": { + "Bookie.Domain": "1.0.0" + }, + "runtime": { + "Bookie.Application.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Bookie.Domain/1.0.0": { + "runtime": { + "Bookie.Domain.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Bookie.Infrastructure/1.0.0": { + "dependencies": { + "Bookie.Application": "1.0.0", + "Bookie.Domain": "1.0.0", + "Npgsql.EntityFrameworkCore.PostgreSQL": "10.0.3", + "System.IdentityModel.Tokens.Jwt": "8.22.0" + }, + "runtime": { + "Bookie.Infrastructure.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + } + } + }, + "libraries": { + "Bookie.Api/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Microsoft.AspNetCore.Authentication.JwtBearer/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Dy9yElSej0rVQL8LBpCLatWTKXNH6h6VBVFmGndTCf1Wge0jSvH9U8mml6ddVDAQ089q1/fDYlhyukHSgx8unQ==", + "path": "microsoft.aspnetcore.authentication.jwtbearer/10.0.11", + "hashPath": "microsoft.aspnetcore.authentication.jwtbearer.10.0.11.nupkg.sha512" + }, + "Microsoft.AspNetCore.OpenApi/10.0.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-vTcxIfOPyfFbYk1g8YcXJfkMnlEWVkSnnjxcZLy60zgwiHMRf2SnZR+9E4HlpwKxgE3yfKMOti8J6WfKuKsw6w==", + "path": "microsoft.aspnetcore.openapi/10.0.5", + "hashPath": "microsoft.aspnetcore.openapi.10.0.5.nupkg.sha512" + }, + "Microsoft.Bcl.Cryptography/10.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LG9Yll3B5aNpxv0+D47g6LiOiKBIlodhcHdQwcYzo8VeexFLGqx5ymetmA2aBRyo9cCcWsQWrFsdbsr8LvmWDw==", + "path": "microsoft.bcl.cryptography/10.0.2", + "hashPath": "microsoft.bcl.cryptography.10.0.2.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kzTsfFK2GCytp6DDTfQOmxPU4gbGdrIlP7PxrxF3ESNLtfXrC8BoUVZENBN2WORlZPAD7CVX6AYIglgkpXQooA==", + "path": "microsoft.entityframeworkcore/10.0.4", + "hashPath": "microsoft.entityframeworkcore.10.0.4.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qDcJqCfN1XYyX0ID/Hd9/kQTRvlia8S+Yuwyl9uFhBIKnOCbl9WMdGQCzbZUKbkpkfvf3P9CDdXsnxHyE3O0Aw==", + "path": "microsoft.entityframeworkcore.abstractions/10.0.4", + "hashPath": "microsoft.entityframeworkcore.abstractions.10.0.4.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DOTjTHy93W3TwpMLM4SCm0n57Sc0Jj3+m2S6LSTstKyBB34eT1UouaMS19mpWwvtj42+sRiEjA3+rOTNoNzXFQ==", + "path": "microsoft.entityframeworkcore.relational/10.0.4", + "hashPath": "microsoft.entityframeworkcore.relational.10.0.4.nupkg.sha512" + }, + "Microsoft.IdentityModel.Abstractions/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LU3V3owsu4vGpCg2kyL7SsQEuHwcoJ8FSNBqzLADzCf3/PcKUTcx5Plsd51DoTJMfK/WigXV/03UhaN5JXE6uQ==", + "path": "microsoft.identitymodel.abstractions/8.22.0", + "hashPath": "microsoft.identitymodel.abstractions.8.22.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.JsonWebTokens/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kv6peMLjALZLDAy2H3F77KjVRdwiscn2p/g3ui2chcbuEcAX2MpAbyDcYnJ7Vyh8jZ1aJWrniUMCDWoOgnu4NQ==", + "path": "microsoft.identitymodel.jsonwebtokens/8.22.0", + "hashPath": "microsoft.identitymodel.jsonwebtokens.8.22.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.Logging/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-G9Tl0yXSlr2pkXv4EpXjO16M4q6oo9N/od+gNyOusZ8yM8LZg1H3f/QOMFuOJiV6znzY5MkAREU97JRRnqpEQw==", + "path": "microsoft.identitymodel.logging/8.22.0", + "hashPath": "microsoft.identitymodel.logging.8.22.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.Protocols/8.19.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sGxSsSrZXNmca6D+jHH2rVRyo2nNRd/g4H9CFbPmLLq0xgoH1U0orLWE5minfijw7+zq49tBs7txenbfAErRoQ==", + "path": "microsoft.identitymodel.protocols/8.19.2", + "hashPath": "microsoft.identitymodel.protocols.8.19.2.nupkg.sha512" + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect/8.19.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1XOcyY36cVymzE3qKdzKaUEZ4Pzt7ZpSa14JZoPPK1NLFUkQDs85TCqpV6XDo0YjFXj6nVK00AfOHppjghjhtw==", + "path": "microsoft.identitymodel.protocols.openidconnect/8.19.2", + "hashPath": "microsoft.identitymodel.protocols.openidconnect.8.19.2.nupkg.sha512" + }, + "Microsoft.IdentityModel.Tokens/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-i4lywKKUuVmheCUA+w/q8QNPReNI0qanHI9hhz48AFqD1ljyb8sxPL2RbXOGiPV13XdJ4kxieL9ukS7tD43LxA==", + "path": "microsoft.identitymodel.tokens/8.22.0", + "hashPath": "microsoft.identitymodel.tokens.8.22.0.nupkg.sha512" + }, + "Microsoft.OpenApi/2.7.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0FA67RSnRM4tcBKqiqVu/HPdZ9+QOKbmeRjxRUGTCjPU4C0bmUhd97Dso7Yild5P7nOV6GxJ2xrK0Kv/O9xp0w==", + "path": "microsoft.openapi/2.7.5", + "hashPath": "microsoft.openapi.2.7.5.nupkg.sha512" + }, + "Npgsql/10.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==", + "path": "npgsql/10.0.3", + "hashPath": "npgsql.10.0.3.nupkg.sha512" + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/10.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IPGrrZnRkuW7OlHDhUESZz4G5DLkW7Nej/O3Cx+0iTsgyU5XJxBgpsvTHLloo3WWuAKKbDHXBvWPVkX1deRh1Q==", + "path": "npgsql.entityframeworkcore.postgresql/10.0.3", + "hashPath": "npgsql.entityframeworkcore.postgresql.10.0.3.nupkg.sha512" + }, + "Swashbuckle.AspNetCore/10.2.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8KNh1RWvofdU6DVLyBs4Z/OpUMnmf8oNvJQc0QxpwySRbi42bwLfdVMMrXZWANg5U5KQGQq1xW6r/hlcqw99tQ==", + "path": "swashbuckle.aspnetcore/10.2.3", + "hashPath": "swashbuckle.aspnetcore.10.2.3.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.Swagger/10.2.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1jUUs3WQnrS0FUtaZPLSy1yYMEwS1zlvDmvQ2/eldPHUANX0LJSLVZecCMgSMdeGiRqeaRrIXLtSz++TCiTMww==", + "path": "swashbuckle.aspnetcore.swagger/10.2.3", + "hashPath": "swashbuckle.aspnetcore.swagger.10.2.3.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.SwaggerGen/10.2.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-y7t4coDRAeFYChmvlMRiH2OjbiRrm9AVIDgt17fQfs3x9PVAI5PiwWYOhg+4F13R4Q36WDc9lqfoOnNa3tNbGg==", + "path": "swashbuckle.aspnetcore.swaggergen/10.2.3", + "hashPath": "swashbuckle.aspnetcore.swaggergen.10.2.3.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.SwaggerUI/10.2.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nthWONRs/FJ4yyG206g1cC52WEG8EqrjuMWjGdR+5XG7lbjFto6NqcI9EMICgVFom/UivIjUVwI76ZHbHwTPfQ==", + "path": "swashbuckle.aspnetcore.swaggerui/10.2.3", + "hashPath": "swashbuckle.aspnetcore.swaggerui.10.2.3.nupkg.sha512" + }, + "System.IdentityModel.Tokens.Jwt/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CpXGfNhLl6EgYaOC9XYsc1p7Ci9HtAy0soHJDSBNGse647al4tTq9RDr+LQsrF4Ls79Dx7VfzN34km0W4DWPow==", + "path": "system.identitymodel.tokens.jwt/8.22.0", + "hashPath": "system.identitymodel.tokens.jwt.8.22.0.nupkg.sha512" + }, + "Bookie.Application/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Bookie.Domain/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Bookie.Infrastructure/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.dll new file mode 100644 index 0000000..e6bfb23 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.pdb b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.pdb new file mode 100644 index 0000000..9eea2be Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.pdb differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.runtimeconfig.json b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.runtimeconfig.json new file mode 100644 index 0000000..bf15a00 --- /dev/null +++ b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.runtimeconfig.json @@ -0,0 +1,20 @@ +{ + "runtimeOptions": { + "tfm": "net10.0", + "frameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "10.0.0" + }, + { + "name": "Microsoft.AspNetCore.App", + "version": "10.0.0" + } + ], + "configProperties": { + "System.GC.Server": true, + "System.Reflection.NullabilityInfoContext.IsSupported": true, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.staticwebassets.endpoints.json b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.staticwebassets.endpoints.json new file mode 100644 index 0000000..5576e88 --- /dev/null +++ b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.staticwebassets.endpoints.json @@ -0,0 +1 @@ +{"Version":1,"ManifestType":"Build","Endpoints":[]} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Application.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Application.dll new file mode 100644 index 0000000..d346a56 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Application.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Application.pdb b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Application.pdb new file mode 100644 index 0000000..34dac61 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Application.pdb differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Domain.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Domain.dll new file mode 100644 index 0000000..0a94d58 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Domain.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Domain.pdb b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Domain.pdb new file mode 100644 index 0000000..85e64d9 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Domain.pdb differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Infrastructure.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Infrastructure.dll new file mode 100644 index 0000000..0125b73 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Infrastructure.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Infrastructure.pdb b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Infrastructure.pdb new file mode 100644 index 0000000..f19cf54 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Infrastructure.pdb differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll new file mode 100755 index 0000000..071a194 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.AspNetCore.OpenApi.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.AspNetCore.OpenApi.dll new file mode 100755 index 0000000..2c6c844 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.AspNetCore.OpenApi.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.Bcl.Cryptography.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.Bcl.Cryptography.dll new file mode 100755 index 0000000..4737e4b Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.Bcl.Cryptography.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll new file mode 100755 index 0000000..18fb191 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.Relational.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.Relational.dll new file mode 100755 index 0000000..7464efc Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.Relational.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.dll new file mode 100755 index 0000000..8092894 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Abstractions.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Abstractions.dll new file mode 100755 index 0000000..a5358ee Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Abstractions.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll new file mode 100755 index 0000000..f71fa80 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Logging.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Logging.dll new file mode 100755 index 0000000..8f828e7 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Logging.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll new file mode 100755 index 0000000..4f26df7 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Protocols.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Protocols.dll new file mode 100755 index 0000000..a21afb4 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Protocols.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Tokens.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Tokens.dll new file mode 100755 index 0000000..15f352b Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Tokens.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.OpenApi.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.OpenApi.dll new file mode 100755 index 0000000..fc8cd69 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.OpenApi.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll new file mode 100755 index 0000000..a93ed77 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Npgsql.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Npgsql.dll new file mode 100755 index 0000000..184db8d Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Npgsql.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.Swagger.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.Swagger.dll new file mode 100755 index 0000000..d912cb7 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.Swagger.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll new file mode 100755 index 0000000..8db3701 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll new file mode 100755 index 0000000..0dc5213 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/System.IdentityModel.Tokens.Jwt.dll b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/System.IdentityModel.Tokens.Jwt.dll new file mode 100755 index 0000000..47a0c96 Binary files /dev/null and b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/System.IdentityModel.Tokens.Jwt.dll differ diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/appsettings.Development.json b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/BookieApi/src/Bookie.Api/bin/Debug/net10.0/appsettings.json b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/appsettings.json new file mode 100644 index 0000000..db2f779 --- /dev/null +++ b/BookieApi/src/Bookie.Api/bin/Debug/net10.0/appsettings.json @@ -0,0 +1,32 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "BookieDb": "Host=158.220.99.25;Port=5432;Database=modwad;Username=trent;Password=QQVWG3DE5DHD2OWS3PRFKABOQJT55ACBEELK47FO275SVRCOP3GQ====;Search Path=bookie" + }, + "Jwt": { + "Issuer": "BookieApi", + "Audience": "BookieClient", + "Secret": "CHANGE_ME_super_secret_key_at_least_32_chars_long_1234567890", + "ExpiryMinutes": 480 + }, + "AuthUsers": { + "Users": [ + { "Username": "admin", "Password": "admin123", "Role": "admin" }, + { "Username": "user", "Password": "user123", "Role": "user" } + ] + }, + "Cors": { + "AllowedOrigins": [ "http://localhost:4200" ] + }, + "OpenAI": { + "ApiKey": "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", + "Model": "gpt-5.6-luna", + "BaseUrl": "https://api.openai.com/v1" + } +} diff --git a/BookieApi/src/Bookie.Api/obj/Bookie.Api.csproj.nuget.dgspec.json b/BookieApi/src/Bookie.Api/obj/Bookie.Api.csproj.nuget.dgspec.json new file mode 100644 index 0000000..4324cb4 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Bookie.Api.csproj.nuget.dgspec.json @@ -0,0 +1,1553 @@ +{ + "format": 1, + "restore": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/Bookie.Api.csproj": {} + }, + "projects": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/Bookie.Api.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/Bookie.Api.csproj", + "projectName": "Bookie.Api", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/Bookie.Api.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj" + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "dependencies": { + "Microsoft.AspNetCore.Authentication.JwtBearer": { + "target": "Package", + "version": "[10.0.11, )" + }, + "Microsoft.AspNetCore.OpenApi": { + "target": "Package", + "version": "[10.0.5, )" + }, + "Swashbuckle.AspNetCore": { + "target": "Package", + "version": "[10.2.3, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.AspNetCore.App": { + "privateAssets": "none" + }, + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.AspNetCore": "(,10.0.32767]", + "Microsoft.AspNetCore.Antiforgery": "(,10.0.32767]", + "Microsoft.AspNetCore.App": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.BearerToken": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.Cookies": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.Core": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.OAuth": "(,10.0.32767]", + "Microsoft.AspNetCore.Authorization": "(,10.0.32767]", + "Microsoft.AspNetCore.Authorization.Policy": "(,10.0.32767]", + "Microsoft.AspNetCore.Components": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Authorization": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Endpoints": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Forms": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Server": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Web": "(,10.0.32767]", + "Microsoft.AspNetCore.Connections.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.CookiePolicy": "(,10.0.32767]", + "Microsoft.AspNetCore.Cors": "(,10.0.32767]", + "Microsoft.AspNetCore.Cryptography.Internal": "(,10.0.32767]", + "Microsoft.AspNetCore.Cryptography.KeyDerivation": "(,10.0.32767]", + "Microsoft.AspNetCore.DataProtection": "(,10.0.32767]", + "Microsoft.AspNetCore.DataProtection.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.DataProtection.Extensions": "(,10.0.32767]", + "Microsoft.AspNetCore.Diagnostics": "(,10.0.32767]", + "Microsoft.AspNetCore.Diagnostics.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Diagnostics.HealthChecks": "(,10.0.32767]", + "Microsoft.AspNetCore.HostFiltering": "(,10.0.32767]", + "Microsoft.AspNetCore.Hosting": "(,10.0.32767]", + "Microsoft.AspNetCore.Hosting.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Hosting.Server.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Html.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Http": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Connections": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Connections.Common": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Extensions": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Features": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Results": "(,10.0.32767]", + "Microsoft.AspNetCore.HttpLogging": "(,10.0.32767]", + "Microsoft.AspNetCore.HttpOverrides": "(,10.0.32767]", + "Microsoft.AspNetCore.HttpsPolicy": "(,10.0.32767]", + "Microsoft.AspNetCore.Identity": "(,10.0.32767]", + "Microsoft.AspNetCore.Localization": "(,10.0.32767]", + "Microsoft.AspNetCore.Localization.Routing": "(,10.0.32767]", + "Microsoft.AspNetCore.Metadata": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.ApiExplorer": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Core": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Cors": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.DataAnnotations": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Formatters.Json": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Formatters.Xml": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Localization": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Razor": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.RazorPages": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.TagHelpers": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.ViewFeatures": "(,10.0.32767]", + "Microsoft.AspNetCore.OutputCaching": "(,10.0.32767]", + "Microsoft.AspNetCore.RateLimiting": "(,10.0.32767]", + "Microsoft.AspNetCore.Razor": "(,10.0.32767]", + "Microsoft.AspNetCore.Razor.Runtime": "(,10.0.32767]", + "Microsoft.AspNetCore.RequestDecompression": "(,10.0.32767]", + "Microsoft.AspNetCore.ResponseCaching": "(,10.0.32767]", + "Microsoft.AspNetCore.ResponseCaching.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.ResponseCompression": "(,10.0.32767]", + "Microsoft.AspNetCore.Rewrite": "(,10.0.32767]", + "Microsoft.AspNetCore.Routing": "(,10.0.32767]", + "Microsoft.AspNetCore.Routing.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.HttpSys": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.IIS": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.IISIntegration": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel.Core": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets": "(,10.0.32767]", + "Microsoft.AspNetCore.Session": "(,10.0.32767]", + "Microsoft.AspNetCore.SignalR": "(,10.0.32767]", + "Microsoft.AspNetCore.SignalR.Common": "(,10.0.32767]", + "Microsoft.AspNetCore.SignalR.Core": "(,10.0.32767]", + "Microsoft.AspNetCore.SignalR.Protocols.Json": "(,10.0.32767]", + "Microsoft.AspNetCore.StaticAssets": "(,10.0.32767]", + "Microsoft.AspNetCore.StaticFiles": "(,10.0.32767]", + "Microsoft.AspNetCore.WebSockets": "(,10.0.32767]", + "Microsoft.AspNetCore.WebUtilities": "(,10.0.32767]", + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.Extensions.Caching.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Caching.Memory": "(,10.0.32767]", + "Microsoft.Extensions.Configuration": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Binder": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.CommandLine": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.FileExtensions": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Ini": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Json": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.KeyPerFile": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.UserSecrets": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Xml": "(,10.0.32767]", + "Microsoft.Extensions.DependencyInjection": "(,10.0.32767]", + "Microsoft.Extensions.DependencyInjection.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Diagnostics": "(,10.0.32767]", + "Microsoft.Extensions.Diagnostics.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Diagnostics.HealthChecks": "(,10.0.32767]", + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Features": "(,10.0.32767]", + "Microsoft.Extensions.FileProviders.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.FileProviders.Composite": "(,10.0.32767]", + "Microsoft.Extensions.FileProviders.Physical": "(,10.0.32767]", + "Microsoft.Extensions.FileSystemGlobbing": "(,10.0.32767]", + "Microsoft.Extensions.Hosting": "(,10.0.32767]", + "Microsoft.Extensions.Hosting.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Http": "(,10.0.32767]", + "Microsoft.Extensions.Identity.Core": "(,10.0.32767]", + "Microsoft.Extensions.Identity.Stores": "(,10.0.32767]", + "Microsoft.Extensions.Localization": "(,10.0.32767]", + "Microsoft.Extensions.Localization.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Logging": "(,10.0.32767]", + "Microsoft.Extensions.Logging.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Logging.Configuration": "(,10.0.32767]", + "Microsoft.Extensions.Logging.Console": "(,10.0.32767]", + "Microsoft.Extensions.Logging.Debug": "(,10.0.32767]", + "Microsoft.Extensions.Logging.EventLog": "(,10.0.32767]", + "Microsoft.Extensions.Logging.EventSource": "(,10.0.32767]", + "Microsoft.Extensions.Logging.TraceSource": "(,10.0.32767]", + "Microsoft.Extensions.ObjectPool": "(,10.0.32767]", + "Microsoft.Extensions.Options": "(,10.0.32767]", + "Microsoft.Extensions.Options.ConfigurationExtensions": "(,10.0.32767]", + "Microsoft.Extensions.Options.DataAnnotations": "(,10.0.32767]", + "Microsoft.Extensions.Primitives": "(,10.0.32767]", + "Microsoft.Extensions.Validation": "(,10.0.32767]", + "Microsoft.Extensions.WebEncoders": "(,10.0.32767]", + "Microsoft.JSInterop": "(,10.0.32767]", + "Microsoft.Net.Http.Headers": "(,10.0.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.EventLog": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Cbor": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Cryptography.Xml": "(,10.0.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.RateLimiting": "(,10.0.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj", + "projectName": "Bookie.Application", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[10.0.11, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "projectName": "Bookie.Domain", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj", + "projectName": "Bookie.Infrastructure", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj" + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "dependencies": { + "Microsoft.EntityFrameworkCore.Design": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[10.0.4, )" + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[10.0.11, )" + }, + "Microsoft.Extensions.Http": { + "target": "Package", + "version": "[10.0.0, )" + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "target": "Package", + "version": "[10.0.11, )" + }, + "Npgsql.EntityFrameworkCore.PostgreSQL": { + "target": "Package", + "version": "[10.0.3, )" + }, + "System.IdentityModel.Tokens.Jwt": { + "target": "Package", + "version": "[8.22.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/Bookie.Api.csproj.nuget.g.props b/BookieApi/src/Bookie.Api/obj/Bookie.Api.csproj.nuget.g.props new file mode 100644 index 0000000..fb69309 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Bookie.Api.csproj.nuget.g.props @@ -0,0 +1,23 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /Users/piotrkus/.nuget/packages/ + /Users/piotrkus/.nuget/packages/ + PackageReference + 7.0.0 + + + + + + + + + + + /Users/piotrkus/.nuget/packages/microsoft.extensions.apidescription.server/10.0.0 + + \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/Bookie.Api.csproj.nuget.g.targets b/BookieApi/src/Bookie.Api/obj/Bookie.Api.csproj.nuget.g.targets new file mode 100644 index 0000000..4c497ae --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Bookie.Api.csproj.nuget.g.targets @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs new file mode 100644 index 0000000..925b135 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")] diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.AssemblyInfo.cs b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.AssemblyInfo.cs new file mode 100644 index 0000000..eabf601 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Bookie.Api")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Bookie.Api")] +[assembly: System.Reflection.AssemblyTitleAttribute("Bookie.Api")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Wygenerowane przez klasę WriteCodeFragment programu MSBuild. + diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.AssemblyInfoInputs.cache b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.AssemblyInfoInputs.cache new file mode 100644 index 0000000..29675cb --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +4fc81d774ab6d58ec2f5cfd891c0c9002b7dda1a7354ee0fe29263e467485d10 diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.GeneratedMSBuildEditorConfig.editorconfig b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..88a1bde --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,23 @@ +is_global = true +build_property.TargetFramework = net10.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v10.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = true +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Bookie.Api +build_property.RootNamespace = Bookie.Api +build_property.ProjectDir = /Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.RazorLangVersion = 9.0 +build_property.SupportLocalizedComponentNames = +build_property.GenerateRazorMetadataSourceChecksumAttributes = +build_property.MSBuildProjectDirectory = /Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api +build_property._RazorSourceGeneratorDebug = +build_property.EffectiveAnalysisLevelStyle = 10.0 +build_property.EnableCodeStyleSeverity = diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.GlobalUsings.g.cs b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.GlobalUsings.g.cs new file mode 100644 index 0000000..5e6145d --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.GlobalUsings.g.cs @@ -0,0 +1,17 @@ +// +global using Microsoft.AspNetCore.Builder; +global using Microsoft.AspNetCore.Hosting; +global using Microsoft.AspNetCore.Http; +global using Microsoft.AspNetCore.Routing; +global using Microsoft.Extensions.Configuration; +global using Microsoft.Extensions.DependencyInjection; +global using Microsoft.Extensions.Hosting; +global using Microsoft.Extensions.Logging; +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Net.Http.Json; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.MvcApplicationPartsAssemblyInfo.cache b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.MvcApplicationPartsAssemblyInfo.cache new file mode 100644 index 0000000..e69de29 diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.MvcApplicationPartsAssemblyInfo.cs b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.MvcApplicationPartsAssemblyInfo.cs new file mode 100644 index 0000000..8538895 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.MvcApplicationPartsAssemblyInfo.cs @@ -0,0 +1,17 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Microsoft.AspNetCore.OpenApi")] +[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Swashbuckle.AspNetCore.SwaggerGen")] + +// Wygenerowane przez klasę WriteCodeFragment programu MSBuild. + diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.assets.cache b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.assets.cache new file mode 100644 index 0000000..7afdb4b Binary files /dev/null and b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.assets.cache differ diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.AssemblyReference.cache b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.AssemblyReference.cache new file mode 100644 index 0000000..0d94cb4 Binary files /dev/null and b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.AssemblyReference.cache differ diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.CoreCompileInputs.cache b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..e090ddf --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +5ae2b5be8cc6a3e3a10f34a5ec8779192f9fa4c51ff5cf9e637d4435d882f03a diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.FileListAbsolute.txt b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..185e520 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.FileListAbsolute.txt @@ -0,0 +1,56 @@ +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.AssemblyReference.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rpswa.dswa.cache.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.GeneratedMSBuildEditorConfig.editorconfig +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.AssemblyInfoInputs.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.AssemblyInfo.cs +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.CoreCompileInputs.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.MvcApplicationPartsAssemblyInfo.cs +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.MvcApplicationPartsAssemblyInfo.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/appsettings.Development.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/appsettings.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.staticwebassets.endpoints.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.deps.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.runtimeconfig.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Api.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.AspNetCore.OpenApi.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.Bcl.Cryptography.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.EntityFrameworkCore.Relational.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Abstractions.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Logging.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Protocols.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.IdentityModel.Tokens.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Microsoft.OpenApi.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Npgsql.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.Swagger.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/System.IdentityModel.Tokens.Jwt.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Application.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Domain.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Infrastructure.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Application.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Infrastructure.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/bin/Debug/net10.0/Bookie.Domain.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rjimswa.dswa.cache.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rjsmrazor.dswa.cache.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rjsmcshtml.dswa.cache.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/scopedcss/bundle/Bookie.Api.styles.css +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.json.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.development.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.endpoints.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/swae.build.ex.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.Up2Date +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/refint/Bookie.Api.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.genruntimeconfig.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/Debug/net10.0/ref/Bookie.Api.dll diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.Up2Date b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.csproj.Up2Date new file mode 100644 index 0000000..e69de29 diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.dll b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.dll new file mode 100644 index 0000000..e6bfb23 Binary files /dev/null and b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.dll differ diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.genruntimeconfig.cache b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.genruntimeconfig.cache new file mode 100644 index 0000000..d46ab38 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.genruntimeconfig.cache @@ -0,0 +1 @@ +cddcce6beb97e0bfc8ebcba4b25f88f98a30040bd901e9eb5929f5bdc81f63f9 diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.pdb b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.pdb new file mode 100644 index 0000000..9eea2be Binary files /dev/null and b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/Bookie.Api.pdb differ diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/apphost b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/apphost new file mode 100755 index 0000000..4288769 Binary files /dev/null and b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/apphost differ diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/ref/Bookie.Api.dll b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/ref/Bookie.Api.dll new file mode 100644 index 0000000..4f2e2bd Binary files /dev/null and b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/ref/Bookie.Api.dll differ diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/refint/Bookie.Api.dll b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/refint/Bookie.Api.dll new file mode 100644 index 0000000..4f2e2bd Binary files /dev/null and b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/refint/Bookie.Api.dll differ diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rjsmcshtml.dswa.cache.json b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rjsmcshtml.dswa.cache.json new file mode 100644 index 0000000..7bbbc58 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rjsmcshtml.dswa.cache.json @@ -0,0 +1 @@ +{"GlobalPropertiesHash":"SvmDNfl8WQF88sx+vTdWGJr/vNyTwFGKhlVC7sbeXZs=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["f0WMuA/835Lw35cdDhIgIqgzYv59afVE5VC7LS0JcOo=","e7BRcd/mzmhWN7nYWcmTjnwkfIJqxFqzPJN0ztL36kM=","PhXnjRTCI4ADbsQ9bSfv9OPJ17wsbcUmKkid6BNs7k0=","7vVwO6mZH/kl4UW4piEMre05xG3VDfslTXc8Lt9ZN0o=","G2E/I7iGdG9Uxgjg5HGsz85oSVdsgK5EXdhuYJ4/7vg="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rjsmrazor.dswa.cache.json b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rjsmrazor.dswa.cache.json new file mode 100644 index 0000000..f4507de --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rjsmrazor.dswa.cache.json @@ -0,0 +1 @@ +{"GlobalPropertiesHash":"7Ya2IK3+v0qPRwSRcQNiopfKEqpuNV8pucv69r0U/Y4=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["f0WMuA/835Lw35cdDhIgIqgzYv59afVE5VC7LS0JcOo=","e7BRcd/mzmhWN7nYWcmTjnwkfIJqxFqzPJN0ztL36kM=","PhXnjRTCI4ADbsQ9bSfv9OPJ17wsbcUmKkid6BNs7k0=","7vVwO6mZH/kl4UW4piEMre05xG3VDfslTXc8Lt9ZN0o=","G2E/I7iGdG9Uxgjg5HGsz85oSVdsgK5EXdhuYJ4/7vg="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rpswa.dswa.cache.json b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rpswa.dswa.cache.json new file mode 100644 index 0000000..a48dc8d --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/rpswa.dswa.cache.json @@ -0,0 +1 @@ +{"GlobalPropertiesHash":"sMy6sPK/gjym1Pxbp7fAZ0VsmoxPjNiJRRqFJXCEqj4=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["f0WMuA/835Lw35cdDhIgIqgzYv59afVE5VC7LS0JcOo=","e7BRcd/mzmhWN7nYWcmTjnwkfIJqxFqzPJN0ztL36kM="],"CachedAssets":{},"CachedCopyCandidates":{}} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.endpoints.json b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.endpoints.json new file mode 100644 index 0000000..5576e88 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.endpoints.json @@ -0,0 +1 @@ +{"Version":1,"ManifestType":"Build","Endpoints":[]} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.json b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.json new file mode 100644 index 0000000..cde9150 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.json @@ -0,0 +1 @@ +{"Version":1,"Hash":"XdCB9qewGnfYmvHkbdmi0g4n+9B6mz3+996yG6Okdp0=","Source":"Bookie.Api","BasePath":"/","Mode":"Root","ManifestType":"Build","ReferencedProjectsConfiguration":[],"DiscoveryPatterns":[],"Assets":[],"Endpoints":[]} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.json.cache b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.json.cache new file mode 100644 index 0000000..3429a18 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/staticwebassets.build.json.cache @@ -0,0 +1 @@ +XdCB9qewGnfYmvHkbdmi0g4n+9B6mz3+996yG6Okdp0= \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/Debug/net10.0/swae.build.ex.cache b/BookieApi/src/Bookie.Api/obj/Debug/net10.0/swae.build.ex.cache new file mode 100644 index 0000000..e69de29 diff --git a/BookieApi/src/Bookie.Api/obj/project.assets.json b/BookieApi/src/Bookie.Api/obj/project.assets.json new file mode 100644 index 0000000..0b30abd --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/project.assets.json @@ -0,0 +1,1611 @@ +{ + "version": 3, + "targets": { + "net10.0": { + "Microsoft.AspNetCore.Authentication.JwtBearer/10.0.11": { + "type": "package", + "dependencies": { + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.19.2" + }, + "compile": { + "lib/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll": { + "related": ".xml" + } + }, + "frameworkReferences": [ + "Microsoft.AspNetCore.App" + ] + }, + "Microsoft.AspNetCore.OpenApi/10.0.5": { + "type": "package", + "dependencies": { + "Microsoft.OpenApi": "2.0.0" + }, + "compile": { + "lib/net10.0/Microsoft.AspNetCore.OpenApi.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.AspNetCore.OpenApi.dll": { + "related": ".xml" + } + }, + "frameworkReferences": [ + "Microsoft.AspNetCore.App" + ], + "build": { + "build/Microsoft.AspNetCore.OpenApi.targets": {} + } + }, + "Microsoft.Bcl.Cryptography/10.0.2": { + "type": "package", + "compile": { + "lib/net10.0/Microsoft.Bcl.Cryptography.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Bcl.Cryptography.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.EntityFrameworkCore/10.0.4": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.4", + "Microsoft.EntityFrameworkCore.Analyzers": "10.0.4" + }, + "compile": { + "lib/net10.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net10.0/Microsoft.EntityFrameworkCore.props": {} + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.4": { + "type": "package", + "compile": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Analyzers/10.0.4": { + "type": "package" + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.4": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore": "10.0.4" + }, + "compile": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.ApiDescription.Server/10.0.0": { + "type": "package", + "build": { + "build/Microsoft.Extensions.ApiDescription.Server.props": {}, + "build/Microsoft.Extensions.ApiDescription.Server.targets": {} + }, + "buildMultiTargeting": { + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.props": {}, + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.targets": {} + } + }, + "Microsoft.IdentityModel.Abstractions/8.22.0": { + "type": "package", + "compile": { + "lib/net10.0/Microsoft.IdentityModel.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.IdentityModel.JsonWebTokens/8.22.0": { + "type": "package", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.22.0" + }, + "compile": { + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll": { + "related": ".xml" + } + } + }, + "Microsoft.IdentityModel.Logging/8.22.0": { + "type": "package", + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "8.22.0" + }, + "compile": { + "lib/net10.0/Microsoft.IdentityModel.Logging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Logging.dll": { + "related": ".xml" + } + } + }, + "Microsoft.IdentityModel.Protocols/8.19.2": { + "type": "package", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.19.2" + }, + "compile": { + "lib/net10.0/Microsoft.IdentityModel.Protocols.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Protocols.dll": { + "related": ".xml" + } + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect/8.19.2": { + "type": "package", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "8.19.2", + "System.IdentityModel.Tokens.Jwt": "8.19.2" + }, + "compile": { + "lib/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": { + "related": ".xml" + } + } + }, + "Microsoft.IdentityModel.Tokens/8.22.0": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.Cryptography": "10.0.2", + "Microsoft.IdentityModel.Logging": "8.22.0" + }, + "compile": { + "lib/net10.0/Microsoft.IdentityModel.Tokens.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Tokens.dll": { + "related": ".xml" + } + } + }, + "Microsoft.OpenApi/2.7.5": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.OpenApi.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.OpenApi.dll": { + "related": ".pdb;.xml" + } + } + }, + "Npgsql/10.0.3": { + "type": "package", + "compile": { + "lib/net10.0/Npgsql.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Npgsql.dll": { + "related": ".xml" + } + } + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/10.0.3": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)", + "Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)", + "Npgsql": "10.0.3" + }, + "compile": { + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": { + "related": ".xml" + } + } + }, + "Swashbuckle.AspNetCore/10.2.3": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.ApiDescription.Server": "10.0.0", + "Swashbuckle.AspNetCore.Swagger": "10.2.3", + "Swashbuckle.AspNetCore.SwaggerGen": "10.2.3", + "Swashbuckle.AspNetCore.SwaggerUI": "10.2.3" + }, + "build": { + "build/Swashbuckle.AspNetCore.props": {} + }, + "buildMultiTargeting": { + "buildMultiTargeting/Swashbuckle.AspNetCore.props": {} + } + }, + "Swashbuckle.AspNetCore.Swagger/10.2.3": { + "type": "package", + "dependencies": { + "Microsoft.OpenApi": "2.7.5" + }, + "compile": { + "lib/net10.0/Swashbuckle.AspNetCore.Swagger.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net10.0/Swashbuckle.AspNetCore.Swagger.dll": { + "related": ".pdb;.xml" + } + }, + "frameworkReferences": [ + "Microsoft.AspNetCore.App" + ] + }, + "Swashbuckle.AspNetCore.SwaggerGen/10.2.3": { + "type": "package", + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "10.2.3" + }, + "compile": { + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { + "related": ".pdb;.xml" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerUI/10.2.3": { + "type": "package", + "compile": { + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { + "related": ".pdb;.xml" + } + }, + "frameworkReferences": [ + "Microsoft.AspNetCore.App" + ] + }, + "System.IdentityModel.Tokens.Jwt/8.22.0": { + "type": "package", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "8.22.0", + "Microsoft.IdentityModel.Tokens": "8.22.0" + }, + "compile": { + "lib/net10.0/System.IdentityModel.Tokens.Jwt.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/System.IdentityModel.Tokens.Jwt.dll": { + "related": ".xml" + } + } + }, + "Bookie.Application/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v10.0", + "dependencies": { + "Bookie.Domain": "1.0.0" + }, + "compile": { + "bin/placeholder/Bookie.Application.dll": {} + }, + "runtime": { + "bin/placeholder/Bookie.Application.dll": {} + } + }, + "Bookie.Domain/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v10.0", + "compile": { + "bin/placeholder/Bookie.Domain.dll": {} + }, + "runtime": { + "bin/placeholder/Bookie.Domain.dll": {} + } + }, + "Bookie.Infrastructure/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v10.0", + "dependencies": { + "Bookie.Application": "1.0.0", + "Bookie.Domain": "1.0.0", + "Npgsql.EntityFrameworkCore.PostgreSQL": "10.0.3", + "System.IdentityModel.Tokens.Jwt": "8.22.0" + }, + "compile": { + "bin/placeholder/Bookie.Infrastructure.dll": {} + }, + "runtime": { + "bin/placeholder/Bookie.Infrastructure.dll": {} + } + } + } + }, + "libraries": { + "Microsoft.AspNetCore.Authentication.JwtBearer/10.0.11": { + "sha512": "Dy9yElSej0rVQL8LBpCLatWTKXNH6h6VBVFmGndTCf1Wge0jSvH9U8mml6ddVDAQ089q1/fDYlhyukHSgx8unQ==", + "type": "package", + "path": "microsoft.aspnetcore.authentication.jwtbearer/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "lib/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll", + "lib/net10.0/Microsoft.AspNetCore.Authentication.JwtBearer.xml", + "microsoft.aspnetcore.authentication.jwtbearer.10.0.11.nupkg.sha512", + "microsoft.aspnetcore.authentication.jwtbearer.nuspec" + ] + }, + "Microsoft.AspNetCore.OpenApi/10.0.5": { + "sha512": "vTcxIfOPyfFbYk1g8YcXJfkMnlEWVkSnnjxcZLy60zgwiHMRf2SnZR+9E4HlpwKxgE3yfKMOti8J6WfKuKsw6w==", + "type": "package", + "path": "microsoft.aspnetcore.openapi/10.0.5", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/cs/Microsoft.AspNetCore.OpenApi.SourceGenerators.dll", + "build/Microsoft.AspNetCore.OpenApi.targets", + "lib/net10.0/Microsoft.AspNetCore.OpenApi.dll", + "lib/net10.0/Microsoft.AspNetCore.OpenApi.xml", + "microsoft.aspnetcore.openapi.10.0.5.nupkg.sha512", + "microsoft.aspnetcore.openapi.nuspec" + ] + }, + "Microsoft.Bcl.Cryptography/10.0.2": { + "sha512": "LG9Yll3B5aNpxv0+D47g6LiOiKBIlodhcHdQwcYzo8VeexFLGqx5ymetmA2aBRyo9cCcWsQWrFsdbsr8LvmWDw==", + "type": "package", + "path": "microsoft.bcl.cryptography/10.0.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Bcl.Cryptography.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Bcl.Cryptography.targets", + "lib/net10.0/Microsoft.Bcl.Cryptography.dll", + "lib/net10.0/Microsoft.Bcl.Cryptography.xml", + "lib/net462/Microsoft.Bcl.Cryptography.dll", + "lib/net462/Microsoft.Bcl.Cryptography.xml", + "lib/net8.0/Microsoft.Bcl.Cryptography.dll", + "lib/net8.0/Microsoft.Bcl.Cryptography.xml", + "lib/net9.0/Microsoft.Bcl.Cryptography.dll", + "lib/net9.0/Microsoft.Bcl.Cryptography.xml", + "lib/netstandard2.0/Microsoft.Bcl.Cryptography.dll", + "lib/netstandard2.0/Microsoft.Bcl.Cryptography.xml", + "lib/netstandard2.1/Microsoft.Bcl.Cryptography.dll", + "lib/netstandard2.1/Microsoft.Bcl.Cryptography.xml", + "microsoft.bcl.cryptography.10.0.2.nupkg.sha512", + "microsoft.bcl.cryptography.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.EntityFrameworkCore/10.0.4": { + "sha512": "kzTsfFK2GCytp6DDTfQOmxPU4gbGdrIlP7PxrxF3ESNLtfXrC8BoUVZENBN2WORlZPAD7CVX6AYIglgkpXQooA==", + "type": "package", + "path": "microsoft.entityframeworkcore/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "buildTransitive/net10.0/Microsoft.EntityFrameworkCore.props", + "lib/net10.0/Microsoft.EntityFrameworkCore.dll", + "lib/net10.0/Microsoft.EntityFrameworkCore.xml", + "microsoft.entityframeworkcore.10.0.4.nupkg.sha512", + "microsoft.entityframeworkcore.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.4": { + "sha512": "qDcJqCfN1XYyX0ID/Hd9/kQTRvlia8S+Yuwyl9uFhBIKnOCbl9WMdGQCzbZUKbkpkfvf3P9CDdXsnxHyE3O0Aw==", + "type": "package", + "path": "microsoft.entityframeworkcore.abstractions/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll", + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.xml", + "microsoft.entityframeworkcore.abstractions.10.0.4.nupkg.sha512", + "microsoft.entityframeworkcore.abstractions.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Analyzers/10.0.4": { + "sha512": "pQeMHCyD3yTtCEGnHV4VsgKUvrESo3MR5mnh8sgQ1hWYmI1YFsUutDowBIxkobeWRtaRmBqQAtF7XQFW6FWuNA==", + "type": "package", + "path": "microsoft.entityframeworkcore.analyzers/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll", + "docs/PACKAGE.md", + "microsoft.entityframeworkcore.analyzers.10.0.4.nupkg.sha512", + "microsoft.entityframeworkcore.analyzers.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.4": { + "sha512": "DOTjTHy93W3TwpMLM4SCm0n57Sc0Jj3+m2S6LSTstKyBB34eT1UouaMS19mpWwvtj42+sRiEjA3+rOTNoNzXFQ==", + "type": "package", + "path": "microsoft.entityframeworkcore.relational/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll", + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.xml", + "microsoft.entityframeworkcore.relational.10.0.4.nupkg.sha512", + "microsoft.entityframeworkcore.relational.nuspec" + ] + }, + "Microsoft.Extensions.ApiDescription.Server/10.0.0": { + "sha512": "NCWCGiwRwje8773yzPQhvucYnnfeR+ZoB1VRIrIMp4uaeUNw7jvEPHij3HIbwCDuNCrNcphA00KSAR9yD9qmbg==", + "type": "package", + "path": "microsoft.extensions.apidescription.server/10.0.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "build/Microsoft.Extensions.ApiDescription.Server.props", + "build/Microsoft.Extensions.ApiDescription.Server.targets", + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.props", + "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.targets", + "microsoft.extensions.apidescription.server.10.0.0.nupkg.sha512", + "microsoft.extensions.apidescription.server.nuspec", + "tools/Newtonsoft.Json.dll", + "tools/dotnet-getdocument.deps.json", + "tools/dotnet-getdocument.dll", + "tools/dotnet-getdocument.runtimeconfig.json", + "tools/net10.0/GetDocument.Insider.deps.json", + "tools/net10.0/GetDocument.Insider.dll", + "tools/net10.0/GetDocument.Insider.exe", + "tools/net10.0/GetDocument.Insider.runtimeconfig.json", + "tools/net10.0/Microsoft.AspNetCore.Connections.Abstractions.dll", + "tools/net10.0/Microsoft.AspNetCore.Connections.Abstractions.xml", + "tools/net10.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll", + "tools/net10.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.xml", + "tools/net10.0/Microsoft.AspNetCore.Http.Features.dll", + "tools/net10.0/Microsoft.AspNetCore.Http.Features.xml", + "tools/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "tools/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "tools/net10.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "tools/net10.0/Microsoft.Extensions.Features.dll", + "tools/net10.0/Microsoft.Extensions.Features.xml", + "tools/net10.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "tools/net10.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "tools/net10.0/Microsoft.Extensions.Logging.Abstractions.dll", + "tools/net10.0/Microsoft.Extensions.Options.dll", + "tools/net10.0/Microsoft.Extensions.Primitives.dll", + "tools/net10.0/Microsoft.Net.Http.Headers.dll", + "tools/net10.0/Microsoft.Net.Http.Headers.xml", + "tools/net10.0/Microsoft.OpenApi.dll", + "tools/net462-x86/GetDocument.Insider.exe", + "tools/net462-x86/GetDocument.Insider.exe.config", + "tools/net462-x86/Microsoft.Bcl.AsyncInterfaces.dll", + "tools/net462-x86/Microsoft.OpenApi.dll", + "tools/net462-x86/Microsoft.Win32.Primitives.dll", + "tools/net462-x86/System.AppContext.dll", + "tools/net462-x86/System.Buffers.dll", + "tools/net462-x86/System.Collections.Concurrent.dll", + "tools/net462-x86/System.Collections.NonGeneric.dll", + "tools/net462-x86/System.Collections.Specialized.dll", + "tools/net462-x86/System.Collections.dll", + "tools/net462-x86/System.ComponentModel.EventBasedAsync.dll", + "tools/net462-x86/System.ComponentModel.Primitives.dll", + "tools/net462-x86/System.ComponentModel.TypeConverter.dll", + "tools/net462-x86/System.ComponentModel.dll", + "tools/net462-x86/System.Console.dll", + "tools/net462-x86/System.Data.Common.dll", + "tools/net462-x86/System.Diagnostics.Contracts.dll", + "tools/net462-x86/System.Diagnostics.Debug.dll", + "tools/net462-x86/System.Diagnostics.DiagnosticSource.dll", + "tools/net462-x86/System.Diagnostics.FileVersionInfo.dll", + "tools/net462-x86/System.Diagnostics.Process.dll", + "tools/net462-x86/System.Diagnostics.StackTrace.dll", + "tools/net462-x86/System.Diagnostics.TextWriterTraceListener.dll", + "tools/net462-x86/System.Diagnostics.Tools.dll", + "tools/net462-x86/System.Diagnostics.TraceSource.dll", + "tools/net462-x86/System.Diagnostics.Tracing.dll", + "tools/net462-x86/System.Drawing.Primitives.dll", + "tools/net462-x86/System.Dynamic.Runtime.dll", + "tools/net462-x86/System.Globalization.Calendars.dll", + "tools/net462-x86/System.Globalization.Extensions.dll", + "tools/net462-x86/System.Globalization.dll", + "tools/net462-x86/System.IO.Compression.ZipFile.dll", + "tools/net462-x86/System.IO.Compression.dll", + "tools/net462-x86/System.IO.FileSystem.DriveInfo.dll", + "tools/net462-x86/System.IO.FileSystem.Primitives.dll", + "tools/net462-x86/System.IO.FileSystem.Watcher.dll", + "tools/net462-x86/System.IO.FileSystem.dll", + "tools/net462-x86/System.IO.IsolatedStorage.dll", + "tools/net462-x86/System.IO.MemoryMappedFiles.dll", + "tools/net462-x86/System.IO.Pipes.dll", + "tools/net462-x86/System.IO.UnmanagedMemoryStream.dll", + "tools/net462-x86/System.IO.dll", + "tools/net462-x86/System.Linq.Expressions.dll", + "tools/net462-x86/System.Linq.Parallel.dll", + "tools/net462-x86/System.Linq.Queryable.dll", + "tools/net462-x86/System.Linq.dll", + "tools/net462-x86/System.Memory.dll", + "tools/net462-x86/System.Net.Http.dll", + "tools/net462-x86/System.Net.NameResolution.dll", + "tools/net462-x86/System.Net.NetworkInformation.dll", + "tools/net462-x86/System.Net.Ping.dll", + "tools/net462-x86/System.Net.Primitives.dll", + "tools/net462-x86/System.Net.Requests.dll", + "tools/net462-x86/System.Net.Security.dll", + "tools/net462-x86/System.Net.Sockets.dll", + "tools/net462-x86/System.Net.WebHeaderCollection.dll", + "tools/net462-x86/System.Net.WebSockets.Client.dll", + "tools/net462-x86/System.Net.WebSockets.dll", + "tools/net462-x86/System.Numerics.Vectors.dll", + "tools/net462-x86/System.ObjectModel.dll", + "tools/net462-x86/System.Reflection.Extensions.dll", + "tools/net462-x86/System.Reflection.Primitives.dll", + "tools/net462-x86/System.Reflection.dll", + "tools/net462-x86/System.Resources.Reader.dll", + "tools/net462-x86/System.Resources.ResourceManager.dll", + "tools/net462-x86/System.Resources.Writer.dll", + "tools/net462-x86/System.Runtime.CompilerServices.Unsafe.dll", + "tools/net462-x86/System.Runtime.CompilerServices.VisualC.dll", + "tools/net462-x86/System.Runtime.Extensions.dll", + "tools/net462-x86/System.Runtime.Handles.dll", + "tools/net462-x86/System.Runtime.InteropServices.RuntimeInformation.dll", + "tools/net462-x86/System.Runtime.InteropServices.dll", + "tools/net462-x86/System.Runtime.Numerics.dll", + "tools/net462-x86/System.Runtime.Serialization.Formatters.dll", + "tools/net462-x86/System.Runtime.Serialization.Json.dll", + "tools/net462-x86/System.Runtime.Serialization.Primitives.dll", + "tools/net462-x86/System.Runtime.Serialization.Xml.dll", + "tools/net462-x86/System.Runtime.dll", + "tools/net462-x86/System.Security.Claims.dll", + "tools/net462-x86/System.Security.Cryptography.Algorithms.dll", + "tools/net462-x86/System.Security.Cryptography.Csp.dll", + "tools/net462-x86/System.Security.Cryptography.Encoding.dll", + "tools/net462-x86/System.Security.Cryptography.Primitives.dll", + "tools/net462-x86/System.Security.Cryptography.X509Certificates.dll", + "tools/net462-x86/System.Security.Principal.dll", + "tools/net462-x86/System.Security.SecureString.dll", + "tools/net462-x86/System.Text.Encoding.Extensions.dll", + "tools/net462-x86/System.Text.Encoding.dll", + "tools/net462-x86/System.Text.Encodings.Web.dll", + "tools/net462-x86/System.Text.Json.dll", + "tools/net462-x86/System.Text.RegularExpressions.dll", + "tools/net462-x86/System.Threading.Overlapped.dll", + "tools/net462-x86/System.Threading.Tasks.Extensions.dll", + "tools/net462-x86/System.Threading.Tasks.Parallel.dll", + "tools/net462-x86/System.Threading.Tasks.dll", + "tools/net462-x86/System.Threading.Thread.dll", + "tools/net462-x86/System.Threading.ThreadPool.dll", + "tools/net462-x86/System.Threading.Timer.dll", + "tools/net462-x86/System.Threading.dll", + "tools/net462-x86/System.ValueTuple.dll", + "tools/net462-x86/System.Xml.ReaderWriter.dll", + "tools/net462-x86/System.Xml.XDocument.dll", + "tools/net462-x86/System.Xml.XPath.XDocument.dll", + "tools/net462-x86/System.Xml.XPath.dll", + "tools/net462-x86/System.Xml.XmlDocument.dll", + "tools/net462-x86/System.Xml.XmlSerializer.dll", + "tools/net462-x86/netstandard.dll", + "tools/net462/GetDocument.Insider.exe", + "tools/net462/GetDocument.Insider.exe.config", + "tools/net462/Microsoft.Bcl.AsyncInterfaces.dll", + "tools/net462/Microsoft.OpenApi.dll", + "tools/net462/Microsoft.Win32.Primitives.dll", + "tools/net462/System.AppContext.dll", + "tools/net462/System.Buffers.dll", + "tools/net462/System.Collections.Concurrent.dll", + "tools/net462/System.Collections.NonGeneric.dll", + "tools/net462/System.Collections.Specialized.dll", + "tools/net462/System.Collections.dll", + "tools/net462/System.ComponentModel.EventBasedAsync.dll", + "tools/net462/System.ComponentModel.Primitives.dll", + "tools/net462/System.ComponentModel.TypeConverter.dll", + "tools/net462/System.ComponentModel.dll", + "tools/net462/System.Console.dll", + "tools/net462/System.Data.Common.dll", + "tools/net462/System.Diagnostics.Contracts.dll", + "tools/net462/System.Diagnostics.Debug.dll", + "tools/net462/System.Diagnostics.DiagnosticSource.dll", + "tools/net462/System.Diagnostics.FileVersionInfo.dll", + "tools/net462/System.Diagnostics.Process.dll", + "tools/net462/System.Diagnostics.StackTrace.dll", + "tools/net462/System.Diagnostics.TextWriterTraceListener.dll", + "tools/net462/System.Diagnostics.Tools.dll", + "tools/net462/System.Diagnostics.TraceSource.dll", + "tools/net462/System.Diagnostics.Tracing.dll", + "tools/net462/System.Drawing.Primitives.dll", + "tools/net462/System.Dynamic.Runtime.dll", + "tools/net462/System.Globalization.Calendars.dll", + "tools/net462/System.Globalization.Extensions.dll", + "tools/net462/System.Globalization.dll", + "tools/net462/System.IO.Compression.ZipFile.dll", + "tools/net462/System.IO.Compression.dll", + "tools/net462/System.IO.FileSystem.DriveInfo.dll", + "tools/net462/System.IO.FileSystem.Primitives.dll", + "tools/net462/System.IO.FileSystem.Watcher.dll", + "tools/net462/System.IO.FileSystem.dll", + "tools/net462/System.IO.IsolatedStorage.dll", + "tools/net462/System.IO.MemoryMappedFiles.dll", + "tools/net462/System.IO.Pipes.dll", + "tools/net462/System.IO.UnmanagedMemoryStream.dll", + "tools/net462/System.IO.dll", + "tools/net462/System.Linq.Expressions.dll", + "tools/net462/System.Linq.Parallel.dll", + "tools/net462/System.Linq.Queryable.dll", + "tools/net462/System.Linq.dll", + "tools/net462/System.Memory.dll", + "tools/net462/System.Net.Http.dll", + "tools/net462/System.Net.NameResolution.dll", + "tools/net462/System.Net.NetworkInformation.dll", + "tools/net462/System.Net.Ping.dll", + "tools/net462/System.Net.Primitives.dll", + "tools/net462/System.Net.Requests.dll", + "tools/net462/System.Net.Security.dll", + "tools/net462/System.Net.Sockets.dll", + "tools/net462/System.Net.WebHeaderCollection.dll", + "tools/net462/System.Net.WebSockets.Client.dll", + "tools/net462/System.Net.WebSockets.dll", + "tools/net462/System.Numerics.Vectors.dll", + "tools/net462/System.ObjectModel.dll", + "tools/net462/System.Reflection.Extensions.dll", + "tools/net462/System.Reflection.Primitives.dll", + "tools/net462/System.Reflection.dll", + "tools/net462/System.Resources.Reader.dll", + "tools/net462/System.Resources.ResourceManager.dll", + "tools/net462/System.Resources.Writer.dll", + "tools/net462/System.Runtime.CompilerServices.Unsafe.dll", + "tools/net462/System.Runtime.CompilerServices.VisualC.dll", + "tools/net462/System.Runtime.Extensions.dll", + "tools/net462/System.Runtime.Handles.dll", + "tools/net462/System.Runtime.InteropServices.RuntimeInformation.dll", + "tools/net462/System.Runtime.InteropServices.dll", + "tools/net462/System.Runtime.Numerics.dll", + "tools/net462/System.Runtime.Serialization.Formatters.dll", + "tools/net462/System.Runtime.Serialization.Json.dll", + "tools/net462/System.Runtime.Serialization.Primitives.dll", + "tools/net462/System.Runtime.Serialization.Xml.dll", + "tools/net462/System.Runtime.dll", + "tools/net462/System.Security.Claims.dll", + "tools/net462/System.Security.Cryptography.Algorithms.dll", + "tools/net462/System.Security.Cryptography.Csp.dll", + "tools/net462/System.Security.Cryptography.Encoding.dll", + "tools/net462/System.Security.Cryptography.Primitives.dll", + "tools/net462/System.Security.Cryptography.X509Certificates.dll", + "tools/net462/System.Security.Principal.dll", + "tools/net462/System.Security.SecureString.dll", + "tools/net462/System.Text.Encoding.Extensions.dll", + "tools/net462/System.Text.Encoding.dll", + "tools/net462/System.Text.Encodings.Web.dll", + "tools/net462/System.Text.Json.dll", + "tools/net462/System.Text.RegularExpressions.dll", + "tools/net462/System.Threading.Overlapped.dll", + "tools/net462/System.Threading.Tasks.Extensions.dll", + "tools/net462/System.Threading.Tasks.Parallel.dll", + "tools/net462/System.Threading.Tasks.dll", + "tools/net462/System.Threading.Thread.dll", + "tools/net462/System.Threading.ThreadPool.dll", + "tools/net462/System.Threading.Timer.dll", + "tools/net462/System.Threading.dll", + "tools/net462/System.ValueTuple.dll", + "tools/net462/System.Xml.ReaderWriter.dll", + "tools/net462/System.Xml.XDocument.dll", + "tools/net462/System.Xml.XPath.XDocument.dll", + "tools/net462/System.Xml.XPath.dll", + "tools/net462/System.Xml.XmlDocument.dll", + "tools/net462/System.Xml.XmlSerializer.dll", + "tools/net462/netstandard.dll" + ] + }, + "Microsoft.IdentityModel.Abstractions/8.22.0": { + "sha512": "LU3V3owsu4vGpCg2kyL7SsQEuHwcoJ8FSNBqzLADzCf3/PcKUTcx5Plsd51DoTJMfK/WigXV/03UhaN5JXE6uQ==", + "type": "package", + "path": "microsoft.identitymodel.abstractions/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/net10.0/Microsoft.IdentityModel.Abstractions.xml", + "lib/net462/Microsoft.IdentityModel.Abstractions.dll", + "lib/net462/Microsoft.IdentityModel.Abstractions.xml", + "lib/net472/Microsoft.IdentityModel.Abstractions.dll", + "lib/net472/Microsoft.IdentityModel.Abstractions.xml", + "lib/net6.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/net6.0/Microsoft.IdentityModel.Abstractions.xml", + "lib/net8.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/net8.0/Microsoft.IdentityModel.Abstractions.xml", + "lib/net9.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/net9.0/Microsoft.IdentityModel.Abstractions.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.xml", + "microsoft.identitymodel.abstractions.8.22.0.nupkg.sha512", + "microsoft.identitymodel.abstractions.nuspec" + ] + }, + "Microsoft.IdentityModel.JsonWebTokens/8.22.0": { + "sha512": "kv6peMLjALZLDAy2H3F77KjVRdwiscn2p/g3ui2chcbuEcAX2MpAbyDcYnJ7Vyh8jZ1aJWrniUMCDWoOgnu4NQ==", + "type": "package", + "path": "microsoft.identitymodel.jsonwebtokens/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net462/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net462/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net472/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net472/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "microsoft.identitymodel.jsonwebtokens.8.22.0.nupkg.sha512", + "microsoft.identitymodel.jsonwebtokens.nuspec" + ] + }, + "Microsoft.IdentityModel.Logging/8.22.0": { + "sha512": "G9Tl0yXSlr2pkXv4EpXjO16M4q6oo9N/od+gNyOusZ8yM8LZg1H3f/QOMFuOJiV6znzY5MkAREU97JRRnqpEQw==", + "type": "package", + "path": "microsoft.identitymodel.logging/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.Logging.dll", + "lib/net10.0/Microsoft.IdentityModel.Logging.xml", + "lib/net462/Microsoft.IdentityModel.Logging.dll", + "lib/net462/Microsoft.IdentityModel.Logging.xml", + "lib/net472/Microsoft.IdentityModel.Logging.dll", + "lib/net472/Microsoft.IdentityModel.Logging.xml", + "lib/net6.0/Microsoft.IdentityModel.Logging.dll", + "lib/net6.0/Microsoft.IdentityModel.Logging.xml", + "lib/net8.0/Microsoft.IdentityModel.Logging.dll", + "lib/net8.0/Microsoft.IdentityModel.Logging.xml", + "lib/net9.0/Microsoft.IdentityModel.Logging.dll", + "lib/net9.0/Microsoft.IdentityModel.Logging.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.Logging.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.Logging.xml", + "microsoft.identitymodel.logging.8.22.0.nupkg.sha512", + "microsoft.identitymodel.logging.nuspec" + ] + }, + "Microsoft.IdentityModel.Protocols/8.19.2": { + "sha512": "sGxSsSrZXNmca6D+jHH2rVRyo2nNRd/g4H9CFbPmLLq0xgoH1U0orLWE5minfijw7+zq49tBs7txenbfAErRoQ==", + "type": "package", + "path": "microsoft.identitymodel.protocols/8.19.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.Protocols.dll", + "lib/net10.0/Microsoft.IdentityModel.Protocols.xml", + "lib/net462/Microsoft.IdentityModel.Protocols.dll", + "lib/net462/Microsoft.IdentityModel.Protocols.xml", + "lib/net472/Microsoft.IdentityModel.Protocols.dll", + "lib/net472/Microsoft.IdentityModel.Protocols.xml", + "lib/net6.0/Microsoft.IdentityModel.Protocols.dll", + "lib/net6.0/Microsoft.IdentityModel.Protocols.xml", + "lib/net8.0/Microsoft.IdentityModel.Protocols.dll", + "lib/net8.0/Microsoft.IdentityModel.Protocols.xml", + "lib/net9.0/Microsoft.IdentityModel.Protocols.dll", + "lib/net9.0/Microsoft.IdentityModel.Protocols.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.xml", + "microsoft.identitymodel.protocols.8.19.2.nupkg.sha512", + "microsoft.identitymodel.protocols.nuspec" + ] + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect/8.19.2": { + "sha512": "1XOcyY36cVymzE3qKdzKaUEZ4Pzt7ZpSa14JZoPPK1NLFUkQDs85TCqpV6XDo0YjFXj6nVK00AfOHppjghjhtw==", + "type": "package", + "path": "microsoft.identitymodel.protocols.openidconnect/8.19.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll", + "lib/net10.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml", + "lib/net462/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll", + "lib/net462/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml", + "lib/net472/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll", + "lib/net472/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml", + "lib/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll", + "lib/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml", + "lib/net8.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll", + "lib/net8.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml", + "lib/net9.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll", + "lib/net9.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.xml", + "microsoft.identitymodel.protocols.openidconnect.8.19.2.nupkg.sha512", + "microsoft.identitymodel.protocols.openidconnect.nuspec" + ] + }, + "Microsoft.IdentityModel.Tokens/8.22.0": { + "sha512": "i4lywKKUuVmheCUA+w/q8QNPReNI0qanHI9hhz48AFqD1ljyb8sxPL2RbXOGiPV13XdJ4kxieL9ukS7tD43LxA==", + "type": "package", + "path": "microsoft.identitymodel.tokens/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.Tokens.dll", + "lib/net10.0/Microsoft.IdentityModel.Tokens.xml", + "lib/net462/Microsoft.IdentityModel.Tokens.dll", + "lib/net462/Microsoft.IdentityModel.Tokens.xml", + "lib/net472/Microsoft.IdentityModel.Tokens.dll", + "lib/net472/Microsoft.IdentityModel.Tokens.xml", + "lib/net6.0/Microsoft.IdentityModel.Tokens.dll", + "lib/net6.0/Microsoft.IdentityModel.Tokens.xml", + "lib/net8.0/Microsoft.IdentityModel.Tokens.dll", + "lib/net8.0/Microsoft.IdentityModel.Tokens.xml", + "lib/net9.0/Microsoft.IdentityModel.Tokens.dll", + "lib/net9.0/Microsoft.IdentityModel.Tokens.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.Tokens.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.Tokens.xml", + "microsoft.identitymodel.tokens.8.22.0.nupkg.sha512", + "microsoft.identitymodel.tokens.nuspec" + ] + }, + "Microsoft.OpenApi/2.7.5": { + "sha512": "0FA67RSnRM4tcBKqiqVu/HPdZ9+QOKbmeRjxRUGTCjPU4C0bmUhd97Dso7Yild5P7nOV6GxJ2xrK0Kv/O9xp0w==", + "type": "package", + "path": "microsoft.openapi/2.7.5", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net8.0/Microsoft.OpenApi.dll", + "lib/net8.0/Microsoft.OpenApi.pdb", + "lib/net8.0/Microsoft.OpenApi.xml", + "lib/netstandard2.0/Microsoft.OpenApi.dll", + "lib/netstandard2.0/Microsoft.OpenApi.pdb", + "lib/netstandard2.0/Microsoft.OpenApi.xml", + "microsoft.openapi.2.7.5.nupkg.sha512", + "microsoft.openapi.nuspec" + ] + }, + "Npgsql/10.0.3": { + "sha512": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==", + "type": "package", + "path": "npgsql/10.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Npgsql.dll", + "lib/net10.0/Npgsql.xml", + "lib/net8.0/Npgsql.dll", + "lib/net8.0/Npgsql.xml", + "lib/net9.0/Npgsql.dll", + "lib/net9.0/Npgsql.xml", + "npgsql.10.0.3.nupkg.sha512", + "npgsql.nuspec", + "postgresql.png" + ] + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/10.0.3": { + "sha512": "IPGrrZnRkuW7OlHDhUESZz4G5DLkW7Nej/O3Cx+0iTsgyU5XJxBgpsvTHLloo3WWuAKKbDHXBvWPVkX1deRh1Q==", + "type": "package", + "path": "npgsql.entityframeworkcore.postgresql/10.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll", + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.xml", + "npgsql.entityframeworkcore.postgresql.10.0.3.nupkg.sha512", + "npgsql.entityframeworkcore.postgresql.nuspec", + "postgresql.png" + ] + }, + "Swashbuckle.AspNetCore/10.2.3": { + "sha512": "8KNh1RWvofdU6DVLyBs4Z/OpUMnmf8oNvJQc0QxpwySRbi42bwLfdVMMrXZWANg5U5KQGQq1xW6r/hlcqw99tQ==", + "type": "package", + "path": "swashbuckle.aspnetcore/10.2.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/Swashbuckle.AspNetCore.props", + "buildMultiTargeting/Swashbuckle.AspNetCore.props", + "docs/package-readme.md", + "swashbuckle.aspnetcore.10.2.3.nupkg.sha512", + "swashbuckle.aspnetcore.nuspec" + ] + }, + "Swashbuckle.AspNetCore.Swagger/10.2.3": { + "sha512": "1jUUs3WQnrS0FUtaZPLSy1yYMEwS1zlvDmvQ2/eldPHUANX0LJSLVZecCMgSMdeGiRqeaRrIXLtSz++TCiTMww==", + "type": "package", + "path": "swashbuckle.aspnetcore.swagger/10.2.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net10.0/Swashbuckle.AspNetCore.Swagger.dll", + "lib/net10.0/Swashbuckle.AspNetCore.Swagger.pdb", + "lib/net10.0/Swashbuckle.AspNetCore.Swagger.xml", + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.dll", + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.pdb", + "lib/net8.0/Swashbuckle.AspNetCore.Swagger.xml", + "lib/net9.0/Swashbuckle.AspNetCore.Swagger.dll", + "lib/net9.0/Swashbuckle.AspNetCore.Swagger.pdb", + "lib/net9.0/Swashbuckle.AspNetCore.Swagger.xml", + "package-readme.md", + "swashbuckle.aspnetcore.swagger.10.2.3.nupkg.sha512", + "swashbuckle.aspnetcore.swagger.nuspec" + ] + }, + "Swashbuckle.AspNetCore.SwaggerGen/10.2.3": { + "sha512": "y7t4coDRAeFYChmvlMRiH2OjbiRrm9AVIDgt17fQfs3x9PVAI5PiwWYOhg+4F13R4Q36WDc9lqfoOnNa3tNbGg==", + "type": "package", + "path": "swashbuckle.aspnetcore.swaggergen/10.2.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerGen.dll", + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerGen.xml", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.dll", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerGen.xml", + "lib/net9.0/Swashbuckle.AspNetCore.SwaggerGen.dll", + "lib/net9.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", + "lib/net9.0/Swashbuckle.AspNetCore.SwaggerGen.xml", + "package-readme.md", + "swashbuckle.aspnetcore.swaggergen.10.2.3.nupkg.sha512", + "swashbuckle.aspnetcore.swaggergen.nuspec" + ] + }, + "Swashbuckle.AspNetCore.SwaggerUI/10.2.3": { + "sha512": "nthWONRs/FJ4yyG206g1cC52WEG8EqrjuMWjGdR+5XG7lbjFto6NqcI9EMICgVFom/UivIjUVwI76ZHbHwTPfQ==", + "type": "package", + "path": "swashbuckle.aspnetcore.swaggerui/10.2.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerUI.dll", + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", + "lib/net10.0/Swashbuckle.AspNetCore.SwaggerUI.xml", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.dll", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", + "lib/net8.0/Swashbuckle.AspNetCore.SwaggerUI.xml", + "lib/net9.0/Swashbuckle.AspNetCore.SwaggerUI.dll", + "lib/net9.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", + "lib/net9.0/Swashbuckle.AspNetCore.SwaggerUI.xml", + "package-readme.md", + "swashbuckle.aspnetcore.swaggerui.10.2.3.nupkg.sha512", + "swashbuckle.aspnetcore.swaggerui.nuspec" + ] + }, + "System.IdentityModel.Tokens.Jwt/8.22.0": { + "sha512": "CpXGfNhLl6EgYaOC9XYsc1p7Ci9HtAy0soHJDSBNGse647al4tTq9RDr+LQsrF4Ls79Dx7VfzN34km0W4DWPow==", + "type": "package", + "path": "system.identitymodel.tokens.jwt/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/net10.0/System.IdentityModel.Tokens.Jwt.xml", + "lib/net462/System.IdentityModel.Tokens.Jwt.dll", + "lib/net462/System.IdentityModel.Tokens.Jwt.xml", + "lib/net472/System.IdentityModel.Tokens.Jwt.dll", + "lib/net472/System.IdentityModel.Tokens.Jwt.xml", + "lib/net6.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/net6.0/System.IdentityModel.Tokens.Jwt.xml", + "lib/net8.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/net8.0/System.IdentityModel.Tokens.Jwt.xml", + "lib/net9.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/net9.0/System.IdentityModel.Tokens.Jwt.xml", + "lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.xml", + "system.identitymodel.tokens.jwt.8.22.0.nupkg.sha512", + "system.identitymodel.tokens.jwt.nuspec" + ] + }, + "Bookie.Application/1.0.0": { + "type": "project", + "path": "../Bookie.Application/Bookie.Application.csproj", + "msbuildProject": "../Bookie.Application/Bookie.Application.csproj" + }, + "Bookie.Domain/1.0.0": { + "type": "project", + "path": "../Bookie.Domain/Bookie.Domain.csproj", + "msbuildProject": "../Bookie.Domain/Bookie.Domain.csproj" + }, + "Bookie.Infrastructure/1.0.0": { + "type": "project", + "path": "../Bookie.Infrastructure/Bookie.Infrastructure.csproj", + "msbuildProject": "../Bookie.Infrastructure/Bookie.Infrastructure.csproj" + } + }, + "projectFileDependencyGroups": { + "net10.0": [ + "Bookie.Application >= 1.0.0", + "Bookie.Infrastructure >= 1.0.0", + "Microsoft.AspNetCore.Authentication.JwtBearer >= 10.0.11", + "Microsoft.AspNetCore.OpenApi >= 10.0.5", + "Swashbuckle.AspNetCore >= 10.2.3" + ] + }, + "packageFolders": { + "/Users/piotrkus/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/Bookie.Api.csproj", + "projectName": "Bookie.Api", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/Bookie.Api.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj" + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "dependencies": { + "Microsoft.AspNetCore.Authentication.JwtBearer": { + "target": "Package", + "version": "[10.0.11, )" + }, + "Microsoft.AspNetCore.OpenApi": { + "target": "Package", + "version": "[10.0.5, )" + }, + "Swashbuckle.AspNetCore": { + "target": "Package", + "version": "[10.2.3, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.AspNetCore.App": { + "privateAssets": "none" + }, + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.AspNetCore": "(,10.0.32767]", + "Microsoft.AspNetCore.Antiforgery": "(,10.0.32767]", + "Microsoft.AspNetCore.App": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.BearerToken": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.Cookies": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.Core": "(,10.0.32767]", + "Microsoft.AspNetCore.Authentication.OAuth": "(,10.0.32767]", + "Microsoft.AspNetCore.Authorization": "(,10.0.32767]", + "Microsoft.AspNetCore.Authorization.Policy": "(,10.0.32767]", + "Microsoft.AspNetCore.Components": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Authorization": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Endpoints": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Forms": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Server": "(,10.0.32767]", + "Microsoft.AspNetCore.Components.Web": "(,10.0.32767]", + "Microsoft.AspNetCore.Connections.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.CookiePolicy": "(,10.0.32767]", + "Microsoft.AspNetCore.Cors": "(,10.0.32767]", + "Microsoft.AspNetCore.Cryptography.Internal": "(,10.0.32767]", + "Microsoft.AspNetCore.Cryptography.KeyDerivation": "(,10.0.32767]", + "Microsoft.AspNetCore.DataProtection": "(,10.0.32767]", + "Microsoft.AspNetCore.DataProtection.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.DataProtection.Extensions": "(,10.0.32767]", + "Microsoft.AspNetCore.Diagnostics": "(,10.0.32767]", + "Microsoft.AspNetCore.Diagnostics.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Diagnostics.HealthChecks": "(,10.0.32767]", + "Microsoft.AspNetCore.HostFiltering": "(,10.0.32767]", + "Microsoft.AspNetCore.Hosting": "(,10.0.32767]", + "Microsoft.AspNetCore.Hosting.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Hosting.Server.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Html.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Http": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Connections": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Connections.Common": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Extensions": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Features": "(,10.0.32767]", + "Microsoft.AspNetCore.Http.Results": "(,10.0.32767]", + "Microsoft.AspNetCore.HttpLogging": "(,10.0.32767]", + "Microsoft.AspNetCore.HttpOverrides": "(,10.0.32767]", + "Microsoft.AspNetCore.HttpsPolicy": "(,10.0.32767]", + "Microsoft.AspNetCore.Identity": "(,10.0.32767]", + "Microsoft.AspNetCore.Localization": "(,10.0.32767]", + "Microsoft.AspNetCore.Localization.Routing": "(,10.0.32767]", + "Microsoft.AspNetCore.Metadata": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.ApiExplorer": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Core": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Cors": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.DataAnnotations": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Formatters.Json": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Formatters.Xml": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Localization": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.Razor": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.RazorPages": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.TagHelpers": "(,10.0.32767]", + "Microsoft.AspNetCore.Mvc.ViewFeatures": "(,10.0.32767]", + "Microsoft.AspNetCore.OutputCaching": "(,10.0.32767]", + "Microsoft.AspNetCore.RateLimiting": "(,10.0.32767]", + "Microsoft.AspNetCore.Razor": "(,10.0.32767]", + "Microsoft.AspNetCore.Razor.Runtime": "(,10.0.32767]", + "Microsoft.AspNetCore.RequestDecompression": "(,10.0.32767]", + "Microsoft.AspNetCore.ResponseCaching": "(,10.0.32767]", + "Microsoft.AspNetCore.ResponseCaching.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.ResponseCompression": "(,10.0.32767]", + "Microsoft.AspNetCore.Rewrite": "(,10.0.32767]", + "Microsoft.AspNetCore.Routing": "(,10.0.32767]", + "Microsoft.AspNetCore.Routing.Abstractions": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.HttpSys": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.IIS": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.IISIntegration": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel.Core": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic": "(,10.0.32767]", + "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets": "(,10.0.32767]", + "Microsoft.AspNetCore.Session": "(,10.0.32767]", + "Microsoft.AspNetCore.SignalR": "(,10.0.32767]", + "Microsoft.AspNetCore.SignalR.Common": "(,10.0.32767]", + "Microsoft.AspNetCore.SignalR.Core": "(,10.0.32767]", + "Microsoft.AspNetCore.SignalR.Protocols.Json": "(,10.0.32767]", + "Microsoft.AspNetCore.StaticAssets": "(,10.0.32767]", + "Microsoft.AspNetCore.StaticFiles": "(,10.0.32767]", + "Microsoft.AspNetCore.WebSockets": "(,10.0.32767]", + "Microsoft.AspNetCore.WebUtilities": "(,10.0.32767]", + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.Extensions.Caching.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Caching.Memory": "(,10.0.32767]", + "Microsoft.Extensions.Configuration": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Binder": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.CommandLine": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.FileExtensions": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Ini": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Json": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.KeyPerFile": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.UserSecrets": "(,10.0.32767]", + "Microsoft.Extensions.Configuration.Xml": "(,10.0.32767]", + "Microsoft.Extensions.DependencyInjection": "(,10.0.32767]", + "Microsoft.Extensions.DependencyInjection.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Diagnostics": "(,10.0.32767]", + "Microsoft.Extensions.Diagnostics.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Diagnostics.HealthChecks": "(,10.0.32767]", + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Features": "(,10.0.32767]", + "Microsoft.Extensions.FileProviders.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.FileProviders.Composite": "(,10.0.32767]", + "Microsoft.Extensions.FileProviders.Physical": "(,10.0.32767]", + "Microsoft.Extensions.FileSystemGlobbing": "(,10.0.32767]", + "Microsoft.Extensions.Hosting": "(,10.0.32767]", + "Microsoft.Extensions.Hosting.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Http": "(,10.0.32767]", + "Microsoft.Extensions.Identity.Core": "(,10.0.32767]", + "Microsoft.Extensions.Identity.Stores": "(,10.0.32767]", + "Microsoft.Extensions.Localization": "(,10.0.32767]", + "Microsoft.Extensions.Localization.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Logging": "(,10.0.32767]", + "Microsoft.Extensions.Logging.Abstractions": "(,10.0.32767]", + "Microsoft.Extensions.Logging.Configuration": "(,10.0.32767]", + "Microsoft.Extensions.Logging.Console": "(,10.0.32767]", + "Microsoft.Extensions.Logging.Debug": "(,10.0.32767]", + "Microsoft.Extensions.Logging.EventLog": "(,10.0.32767]", + "Microsoft.Extensions.Logging.EventSource": "(,10.0.32767]", + "Microsoft.Extensions.Logging.TraceSource": "(,10.0.32767]", + "Microsoft.Extensions.ObjectPool": "(,10.0.32767]", + "Microsoft.Extensions.Options": "(,10.0.32767]", + "Microsoft.Extensions.Options.ConfigurationExtensions": "(,10.0.32767]", + "Microsoft.Extensions.Options.DataAnnotations": "(,10.0.32767]", + "Microsoft.Extensions.Primitives": "(,10.0.32767]", + "Microsoft.Extensions.Validation": "(,10.0.32767]", + "Microsoft.Extensions.WebEncoders": "(,10.0.32767]", + "Microsoft.JSInterop": "(,10.0.32767]", + "Microsoft.Net.Http.Headers": "(,10.0.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.EventLog": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Cbor": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Cryptography.Xml": "(,10.0.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.RateLimiting": "(,10.0.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/project.nuget.cache b/BookieApi/src/Bookie.Api/obj/project.nuget.cache new file mode 100644 index 0000000..4303ee8 --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/project.nuget.cache @@ -0,0 +1,31 @@ +{ + "version": 2, + "dgSpecHash": "6zTNoRKMU/A=", + "success": true, + "projectFilePath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/Bookie.Api.csproj", + "expectedPackageFiles": [ + "/Users/piotrkus/.nuget/packages/microsoft.aspnetcore.authentication.jwtbearer/10.0.11/microsoft.aspnetcore.authentication.jwtbearer.10.0.11.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.aspnetcore.openapi/10.0.5/microsoft.aspnetcore.openapi.10.0.5.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.bcl.cryptography/10.0.2/microsoft.bcl.cryptography.10.0.2.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.entityframeworkcore/10.0.4/microsoft.entityframeworkcore.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.entityframeworkcore.abstractions/10.0.4/microsoft.entityframeworkcore.abstractions.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.entityframeworkcore.analyzers/10.0.4/microsoft.entityframeworkcore.analyzers.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.entityframeworkcore.relational/10.0.4/microsoft.entityframeworkcore.relational.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.apidescription.server/10.0.0/microsoft.extensions.apidescription.server.10.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.abstractions/8.22.0/microsoft.identitymodel.abstractions.8.22.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.jsonwebtokens/8.22.0/microsoft.identitymodel.jsonwebtokens.8.22.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.logging/8.22.0/microsoft.identitymodel.logging.8.22.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.protocols/8.19.2/microsoft.identitymodel.protocols.8.19.2.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.protocols.openidconnect/8.19.2/microsoft.identitymodel.protocols.openidconnect.8.19.2.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.tokens/8.22.0/microsoft.identitymodel.tokens.8.22.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.openapi/2.7.5/microsoft.openapi.2.7.5.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/npgsql/10.0.3/npgsql.10.0.3.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/npgsql.entityframeworkcore.postgresql/10.0.3/npgsql.entityframeworkcore.postgresql.10.0.3.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/swashbuckle.aspnetcore/10.2.3/swashbuckle.aspnetcore.10.2.3.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/swashbuckle.aspnetcore.swagger/10.2.3/swashbuckle.aspnetcore.swagger.10.2.3.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/swashbuckle.aspnetcore.swaggergen/10.2.3/swashbuckle.aspnetcore.swaggergen.10.2.3.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/swashbuckle.aspnetcore.swaggerui/10.2.3/swashbuckle.aspnetcore.swaggerui.10.2.3.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/system.identitymodel.tokens.jwt/8.22.0/system.identitymodel.tokens.jwt.8.22.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/project.packagespec.json b/BookieApi/src/Bookie.Api/obj/project.packagespec.json new file mode 100644 index 0000000..6d836ab --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/project.packagespec.json @@ -0,0 +1 @@ +"restore":{"projectUniqueName":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/Bookie.Api.csproj","projectName":"Bookie.Api","projectPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/Bookie.Api.csproj","packagesPath":"","outputPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Api/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net10.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net10.0":{"targetAlias":"net10.0","projectReferences":{"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj":{"projectPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj"},"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj":{"projectPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"all"},"SdkAnalysisLevel":"10.0.200"}"frameworks":{"net10.0":{"targetAlias":"net10.0","dependencies":{"Microsoft.AspNetCore.Authentication.JwtBearer":{"target":"Package","version":"[10.0.11, )"},"Microsoft.AspNetCore.OpenApi":{"target":"Package","version":"[10.0.5, )"},"Swashbuckle.AspNetCore":{"target":"Package","version":"[10.2.3, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json","packagesToPrune":{"Microsoft.AspNetCore":"(,10.0.32767]","Microsoft.AspNetCore.Antiforgery":"(,10.0.32767]","Microsoft.AspNetCore.App":"(,10.0.32767]","Microsoft.AspNetCore.Authentication":"(,10.0.32767]","Microsoft.AspNetCore.Authentication.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.Authentication.BearerToken":"(,10.0.32767]","Microsoft.AspNetCore.Authentication.Cookies":"(,10.0.32767]","Microsoft.AspNetCore.Authentication.Core":"(,10.0.32767]","Microsoft.AspNetCore.Authentication.OAuth":"(,10.0.32767]","Microsoft.AspNetCore.Authorization":"(,10.0.32767]","Microsoft.AspNetCore.Authorization.Policy":"(,10.0.32767]","Microsoft.AspNetCore.Components":"(,10.0.32767]","Microsoft.AspNetCore.Components.Authorization":"(,10.0.32767]","Microsoft.AspNetCore.Components.Endpoints":"(,10.0.32767]","Microsoft.AspNetCore.Components.Forms":"(,10.0.32767]","Microsoft.AspNetCore.Components.Server":"(,10.0.32767]","Microsoft.AspNetCore.Components.Web":"(,10.0.32767]","Microsoft.AspNetCore.Connections.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.CookiePolicy":"(,10.0.32767]","Microsoft.AspNetCore.Cors":"(,10.0.32767]","Microsoft.AspNetCore.Cryptography.Internal":"(,10.0.32767]","Microsoft.AspNetCore.Cryptography.KeyDerivation":"(,10.0.32767]","Microsoft.AspNetCore.DataProtection":"(,10.0.32767]","Microsoft.AspNetCore.DataProtection.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.DataProtection.Extensions":"(,10.0.32767]","Microsoft.AspNetCore.Diagnostics":"(,10.0.32767]","Microsoft.AspNetCore.Diagnostics.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.Diagnostics.HealthChecks":"(,10.0.32767]","Microsoft.AspNetCore.HostFiltering":"(,10.0.32767]","Microsoft.AspNetCore.Hosting":"(,10.0.32767]","Microsoft.AspNetCore.Hosting.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.Hosting.Server.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.Html.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.Http":"(,10.0.32767]","Microsoft.AspNetCore.Http.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.Http.Connections":"(,10.0.32767]","Microsoft.AspNetCore.Http.Connections.Common":"(,10.0.32767]","Microsoft.AspNetCore.Http.Extensions":"(,10.0.32767]","Microsoft.AspNetCore.Http.Features":"(,10.0.32767]","Microsoft.AspNetCore.Http.Results":"(,10.0.32767]","Microsoft.AspNetCore.HttpLogging":"(,10.0.32767]","Microsoft.AspNetCore.HttpOverrides":"(,10.0.32767]","Microsoft.AspNetCore.HttpsPolicy":"(,10.0.32767]","Microsoft.AspNetCore.Identity":"(,10.0.32767]","Microsoft.AspNetCore.Localization":"(,10.0.32767]","Microsoft.AspNetCore.Localization.Routing":"(,10.0.32767]","Microsoft.AspNetCore.Metadata":"(,10.0.32767]","Microsoft.AspNetCore.Mvc":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.ApiExplorer":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.Core":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.Cors":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.DataAnnotations":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.Formatters.Json":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.Formatters.Xml":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.Localization":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.Razor":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.RazorPages":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.TagHelpers":"(,10.0.32767]","Microsoft.AspNetCore.Mvc.ViewFeatures":"(,10.0.32767]","Microsoft.AspNetCore.OutputCaching":"(,10.0.32767]","Microsoft.AspNetCore.RateLimiting":"(,10.0.32767]","Microsoft.AspNetCore.Razor":"(,10.0.32767]","Microsoft.AspNetCore.Razor.Runtime":"(,10.0.32767]","Microsoft.AspNetCore.RequestDecompression":"(,10.0.32767]","Microsoft.AspNetCore.ResponseCaching":"(,10.0.32767]","Microsoft.AspNetCore.ResponseCaching.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.ResponseCompression":"(,10.0.32767]","Microsoft.AspNetCore.Rewrite":"(,10.0.32767]","Microsoft.AspNetCore.Routing":"(,10.0.32767]","Microsoft.AspNetCore.Routing.Abstractions":"(,10.0.32767]","Microsoft.AspNetCore.Server.HttpSys":"(,10.0.32767]","Microsoft.AspNetCore.Server.IIS":"(,10.0.32767]","Microsoft.AspNetCore.Server.IISIntegration":"(,10.0.32767]","Microsoft.AspNetCore.Server.Kestrel":"(,10.0.32767]","Microsoft.AspNetCore.Server.Kestrel.Core":"(,10.0.32767]","Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes":"(,10.0.32767]","Microsoft.AspNetCore.Server.Kestrel.Transport.Quic":"(,10.0.32767]","Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets":"(,10.0.32767]","Microsoft.AspNetCore.Session":"(,10.0.32767]","Microsoft.AspNetCore.SignalR":"(,10.0.32767]","Microsoft.AspNetCore.SignalR.Common":"(,10.0.32767]","Microsoft.AspNetCore.SignalR.Core":"(,10.0.32767]","Microsoft.AspNetCore.SignalR.Protocols.Json":"(,10.0.32767]","Microsoft.AspNetCore.StaticAssets":"(,10.0.32767]","Microsoft.AspNetCore.StaticFiles":"(,10.0.32767]","Microsoft.AspNetCore.WebSockets":"(,10.0.32767]","Microsoft.AspNetCore.WebUtilities":"(,10.0.32767]","Microsoft.CSharp":"(,4.7.32767]","Microsoft.Extensions.Caching.Abstractions":"(,10.0.32767]","Microsoft.Extensions.Caching.Memory":"(,10.0.32767]","Microsoft.Extensions.Configuration":"(,10.0.32767]","Microsoft.Extensions.Configuration.Abstractions":"(,10.0.32767]","Microsoft.Extensions.Configuration.Binder":"(,10.0.32767]","Microsoft.Extensions.Configuration.CommandLine":"(,10.0.32767]","Microsoft.Extensions.Configuration.EnvironmentVariables":"(,10.0.32767]","Microsoft.Extensions.Configuration.FileExtensions":"(,10.0.32767]","Microsoft.Extensions.Configuration.Ini":"(,10.0.32767]","Microsoft.Extensions.Configuration.Json":"(,10.0.32767]","Microsoft.Extensions.Configuration.KeyPerFile":"(,10.0.32767]","Microsoft.Extensions.Configuration.UserSecrets":"(,10.0.32767]","Microsoft.Extensions.Configuration.Xml":"(,10.0.32767]","Microsoft.Extensions.DependencyInjection":"(,10.0.32767]","Microsoft.Extensions.DependencyInjection.Abstractions":"(,10.0.32767]","Microsoft.Extensions.Diagnostics":"(,10.0.32767]","Microsoft.Extensions.Diagnostics.Abstractions":"(,10.0.32767]","Microsoft.Extensions.Diagnostics.HealthChecks":"(,10.0.32767]","Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions":"(,10.0.32767]","Microsoft.Extensions.Features":"(,10.0.32767]","Microsoft.Extensions.FileProviders.Abstractions":"(,10.0.32767]","Microsoft.Extensions.FileProviders.Composite":"(,10.0.32767]","Microsoft.Extensions.FileProviders.Physical":"(,10.0.32767]","Microsoft.Extensions.FileSystemGlobbing":"(,10.0.32767]","Microsoft.Extensions.Hosting":"(,10.0.32767]","Microsoft.Extensions.Hosting.Abstractions":"(,10.0.32767]","Microsoft.Extensions.Http":"(,10.0.32767]","Microsoft.Extensions.Identity.Core":"(,10.0.32767]","Microsoft.Extensions.Identity.Stores":"(,10.0.32767]","Microsoft.Extensions.Localization":"(,10.0.32767]","Microsoft.Extensions.Localization.Abstractions":"(,10.0.32767]","Microsoft.Extensions.Logging":"(,10.0.32767]","Microsoft.Extensions.Logging.Abstractions":"(,10.0.32767]","Microsoft.Extensions.Logging.Configuration":"(,10.0.32767]","Microsoft.Extensions.Logging.Console":"(,10.0.32767]","Microsoft.Extensions.Logging.Debug":"(,10.0.32767]","Microsoft.Extensions.Logging.EventLog":"(,10.0.32767]","Microsoft.Extensions.Logging.EventSource":"(,10.0.32767]","Microsoft.Extensions.Logging.TraceSource":"(,10.0.32767]","Microsoft.Extensions.ObjectPool":"(,10.0.32767]","Microsoft.Extensions.Options":"(,10.0.32767]","Microsoft.Extensions.Options.ConfigurationExtensions":"(,10.0.32767]","Microsoft.Extensions.Options.DataAnnotations":"(,10.0.32767]","Microsoft.Extensions.Primitives":"(,10.0.32767]","Microsoft.Extensions.Validation":"(,10.0.32767]","Microsoft.Extensions.WebEncoders":"(,10.0.32767]","Microsoft.JSInterop":"(,10.0.32767]","Microsoft.Net.Http.Headers":"(,10.0.32767]","Microsoft.VisualBasic":"(,10.4.32767]","Microsoft.Win32.Primitives":"(,4.3.32767]","Microsoft.Win32.Registry":"(,5.0.32767]","runtime.any.System.Collections":"(,4.3.32767]","runtime.any.System.Diagnostics.Tools":"(,4.3.32767]","runtime.any.System.Diagnostics.Tracing":"(,4.3.32767]","runtime.any.System.Globalization":"(,4.3.32767]","runtime.any.System.Globalization.Calendars":"(,4.3.32767]","runtime.any.System.IO":"(,4.3.32767]","runtime.any.System.Reflection":"(,4.3.32767]","runtime.any.System.Reflection.Extensions":"(,4.3.32767]","runtime.any.System.Reflection.Primitives":"(,4.3.32767]","runtime.any.System.Resources.ResourceManager":"(,4.3.32767]","runtime.any.System.Runtime":"(,4.3.32767]","runtime.any.System.Runtime.Handles":"(,4.3.32767]","runtime.any.System.Runtime.InteropServices":"(,4.3.32767]","runtime.any.System.Text.Encoding":"(,4.3.32767]","runtime.any.System.Text.Encoding.Extensions":"(,4.3.32767]","runtime.any.System.Threading.Tasks":"(,4.3.32767]","runtime.any.System.Threading.Timer":"(,4.3.32767]","runtime.aot.System.Collections":"(,4.3.32767]","runtime.aot.System.Diagnostics.Tools":"(,4.3.32767]","runtime.aot.System.Diagnostics.Tracing":"(,4.3.32767]","runtime.aot.System.Globalization":"(,4.3.32767]","runtime.aot.System.Globalization.Calendars":"(,4.3.32767]","runtime.aot.System.IO":"(,4.3.32767]","runtime.aot.System.Reflection":"(,4.3.32767]","runtime.aot.System.Reflection.Extensions":"(,4.3.32767]","runtime.aot.System.Reflection.Primitives":"(,4.3.32767]","runtime.aot.System.Resources.ResourceManager":"(,4.3.32767]","runtime.aot.System.Runtime":"(,4.3.32767]","runtime.aot.System.Runtime.Handles":"(,4.3.32767]","runtime.aot.System.Runtime.InteropServices":"(,4.3.32767]","runtime.aot.System.Text.Encoding":"(,4.3.32767]","runtime.aot.System.Text.Encoding.Extensions":"(,4.3.32767]","runtime.aot.System.Threading.Tasks":"(,4.3.32767]","runtime.aot.System.Threading.Timer":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.unix.Microsoft.Win32.Primitives":"(,4.3.32767]","runtime.unix.System.Console":"(,4.3.32767]","runtime.unix.System.Diagnostics.Debug":"(,4.3.32767]","runtime.unix.System.IO.FileSystem":"(,4.3.32767]","runtime.unix.System.Net.Primitives":"(,4.3.32767]","runtime.unix.System.Net.Sockets":"(,4.3.32767]","runtime.unix.System.Private.Uri":"(,4.3.32767]","runtime.unix.System.Runtime.Extensions":"(,4.3.32767]","runtime.win.Microsoft.Win32.Primitives":"(,4.3.32767]","runtime.win.System.Console":"(,4.3.32767]","runtime.win.System.Diagnostics.Debug":"(,4.3.32767]","runtime.win.System.IO.FileSystem":"(,4.3.32767]","runtime.win.System.Net.Primitives":"(,4.3.32767]","runtime.win.System.Net.Sockets":"(,4.3.32767]","runtime.win.System.Runtime.Extensions":"(,4.3.32767]","runtime.win10-arm-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win10-arm64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win10-x64-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win10-x86-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win7-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win7-x86.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win7.System.Private.Uri":"(,4.3.32767]","runtime.win8-arm.runtime.native.System.IO.Compression":"(,4.3.32767]","System.AppContext":"(,4.3.32767]","System.Buffers":"(,5.0.32767]","System.Collections":"(,4.3.32767]","System.Collections.Concurrent":"(,4.3.32767]","System.Collections.Immutable":"(,10.0.32767]","System.Collections.NonGeneric":"(,4.3.32767]","System.Collections.Specialized":"(,4.3.32767]","System.ComponentModel":"(,4.3.32767]","System.ComponentModel.Annotations":"(,4.3.32767]","System.ComponentModel.EventBasedAsync":"(,4.3.32767]","System.ComponentModel.Primitives":"(,4.3.32767]","System.ComponentModel.TypeConverter":"(,4.3.32767]","System.Console":"(,4.3.32767]","System.Data.Common":"(,4.3.32767]","System.Data.DataSetExtensions":"(,4.4.32767]","System.Diagnostics.Contracts":"(,4.3.32767]","System.Diagnostics.Debug":"(,4.3.32767]","System.Diagnostics.DiagnosticSource":"(,10.0.32767]","System.Diagnostics.EventLog":"(,10.0.32767]","System.Diagnostics.FileVersionInfo":"(,4.3.32767]","System.Diagnostics.Process":"(,4.3.32767]","System.Diagnostics.StackTrace":"(,4.3.32767]","System.Diagnostics.TextWriterTraceListener":"(,4.3.32767]","System.Diagnostics.Tools":"(,4.3.32767]","System.Diagnostics.TraceSource":"(,4.3.32767]","System.Diagnostics.Tracing":"(,4.3.32767]","System.Drawing.Primitives":"(,4.3.32767]","System.Dynamic.Runtime":"(,4.3.32767]","System.Formats.Asn1":"(,10.0.32767]","System.Formats.Cbor":"(,10.0.32767]","System.Formats.Tar":"(,10.0.32767]","System.Globalization":"(,4.3.32767]","System.Globalization.Calendars":"(,4.3.32767]","System.Globalization.Extensions":"(,4.3.32767]","System.IO":"(,4.3.32767]","System.IO.Compression":"(,4.3.32767]","System.IO.Compression.ZipFile":"(,4.3.32767]","System.IO.FileSystem":"(,4.3.32767]","System.IO.FileSystem.AccessControl":"(,4.4.32767]","System.IO.FileSystem.DriveInfo":"(,4.3.32767]","System.IO.FileSystem.Primitives":"(,4.3.32767]","System.IO.FileSystem.Watcher":"(,4.3.32767]","System.IO.IsolatedStorage":"(,4.3.32767]","System.IO.MemoryMappedFiles":"(,4.3.32767]","System.IO.Pipelines":"(,10.0.32767]","System.IO.Pipes":"(,4.3.32767]","System.IO.Pipes.AccessControl":"(,5.0.32767]","System.IO.UnmanagedMemoryStream":"(,4.3.32767]","System.Linq":"(,4.3.32767]","System.Linq.AsyncEnumerable":"(,10.0.32767]","System.Linq.Expressions":"(,4.3.32767]","System.Linq.Parallel":"(,4.3.32767]","System.Linq.Queryable":"(,4.3.32767]","System.Memory":"(,5.0.32767]","System.Net.Http":"(,4.3.32767]","System.Net.Http.Json":"(,10.0.32767]","System.Net.NameResolution":"(,4.3.32767]","System.Net.NetworkInformation":"(,4.3.32767]","System.Net.Ping":"(,4.3.32767]","System.Net.Primitives":"(,4.3.32767]","System.Net.Requests":"(,4.3.32767]","System.Net.Security":"(,4.3.32767]","System.Net.ServerSentEvents":"(,10.0.32767]","System.Net.Sockets":"(,4.3.32767]","System.Net.WebHeaderCollection":"(,4.3.32767]","System.Net.WebSockets":"(,4.3.32767]","System.Net.WebSockets.Client":"(,4.3.32767]","System.Numerics.Vectors":"(,5.0.32767]","System.ObjectModel":"(,4.3.32767]","System.Private.DataContractSerialization":"(,4.3.32767]","System.Private.Uri":"(,4.3.32767]","System.Reflection":"(,4.3.32767]","System.Reflection.DispatchProxy":"(,6.0.32767]","System.Reflection.Emit":"(,4.7.32767]","System.Reflection.Emit.ILGeneration":"(,4.7.32767]","System.Reflection.Emit.Lightweight":"(,4.7.32767]","System.Reflection.Extensions":"(,4.3.32767]","System.Reflection.Metadata":"(,10.0.32767]","System.Reflection.Primitives":"(,4.3.32767]","System.Reflection.TypeExtensions":"(,4.3.32767]","System.Resources.Reader":"(,4.3.32767]","System.Resources.ResourceManager":"(,4.3.32767]","System.Resources.Writer":"(,4.3.32767]","System.Runtime":"(,4.3.32767]","System.Runtime.CompilerServices.Unsafe":"(,7.0.32767]","System.Runtime.CompilerServices.VisualC":"(,4.3.32767]","System.Runtime.Extensions":"(,4.3.32767]","System.Runtime.Handles":"(,4.3.32767]","System.Runtime.InteropServices":"(,4.3.32767]","System.Runtime.InteropServices.RuntimeInformation":"(,4.3.32767]","System.Runtime.Loader":"(,4.3.32767]","System.Runtime.Numerics":"(,4.3.32767]","System.Runtime.Serialization.Formatters":"(,4.3.32767]","System.Runtime.Serialization.Json":"(,4.3.32767]","System.Runtime.Serialization.Primitives":"(,4.3.32767]","System.Runtime.Serialization.Xml":"(,4.3.32767]","System.Security.AccessControl":"(,6.0.32767]","System.Security.Claims":"(,4.3.32767]","System.Security.Cryptography.Algorithms":"(,4.3.32767]","System.Security.Cryptography.Cng":"(,5.0.32767]","System.Security.Cryptography.Csp":"(,4.3.32767]","System.Security.Cryptography.Encoding":"(,4.3.32767]","System.Security.Cryptography.OpenSsl":"(,5.0.32767]","System.Security.Cryptography.Primitives":"(,4.3.32767]","System.Security.Cryptography.X509Certificates":"(,4.3.32767]","System.Security.Cryptography.Xml":"(,10.0.32767]","System.Security.Principal":"(,4.3.32767]","System.Security.Principal.Windows":"(,5.0.32767]","System.Security.SecureString":"(,4.3.32767]","System.Text.Encoding":"(,4.3.32767]","System.Text.Encoding.CodePages":"(,10.0.32767]","System.Text.Encoding.Extensions":"(,4.3.32767]","System.Text.Encodings.Web":"(,10.0.32767]","System.Text.Json":"(,10.0.32767]","System.Text.RegularExpressions":"(,4.3.32767]","System.Threading":"(,4.3.32767]","System.Threading.AccessControl":"(,10.0.32767]","System.Threading.Channels":"(,10.0.32767]","System.Threading.Overlapped":"(,4.3.32767]","System.Threading.RateLimiting":"(,10.0.32767]","System.Threading.Tasks":"(,4.3.32767]","System.Threading.Tasks.Dataflow":"(,10.0.32767]","System.Threading.Tasks.Extensions":"(,5.0.32767]","System.Threading.Tasks.Parallel":"(,4.3.32767]","System.Threading.Thread":"(,4.3.32767]","System.Threading.ThreadPool":"(,4.3.32767]","System.Threading.Timer":"(,4.3.32767]","System.ValueTuple":"(,4.5.32767]","System.Xml.ReaderWriter":"(,4.3.32767]","System.Xml.XDocument":"(,4.3.32767]","System.Xml.XmlDocument":"(,4.3.32767]","System.Xml.XmlSerializer":"(,4.3.32767]","System.Xml.XPath":"(,4.3.32767]","System.Xml.XPath.XDocument":"(,5.0.32767]"}}} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/rider.project.model.nuget.info b/BookieApi/src/Bookie.Api/obj/rider.project.model.nuget.info new file mode 100644 index 0000000..62b58be --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/rider.project.model.nuget.info @@ -0,0 +1 @@ +17891904138499975 \ No newline at end of file diff --git a/BookieApi/src/Bookie.Api/obj/rider.project.restore.info b/BookieApi/src/Bookie.Api/obj/rider.project.restore.info new file mode 100644 index 0000000..62b58be --- /dev/null +++ b/BookieApi/src/Bookie.Api/obj/rider.project.restore.info @@ -0,0 +1 @@ +17891904138499975 \ No newline at end of file diff --git a/BookieApi/src/Bookie.Application/Bookie.Application.csproj b/BookieApi/src/Bookie.Application/Bookie.Application.csproj new file mode 100644 index 0000000..25235de --- /dev/null +++ b/BookieApi/src/Bookie.Application/Bookie.Application.csproj @@ -0,0 +1,17 @@ + + + + + + + + + + + + net10.0 + enable + enable + + + diff --git a/BookieApi/src/Bookie.Application/DTOs/Auth/AuthDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Auth/AuthDtos.cs new file mode 100644 index 0000000..3dfabc2 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Auth/AuthDtos.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; + +namespace Bookie.Application.DTOs.Auth; + +public class LoginRequestDto +{ + [Required] public string Username { get; set; } = ""; + [Required] public string Password { get; set; } = ""; +} + +public class AuthResponseDto +{ + public string Token { get; set; } = ""; + public string Username { get; set; } = ""; + public string Role { get; set; } = ""; + public DateTime ExpiresAt { get; set; } +} diff --git a/BookieApi/src/Bookie.Application/DTOs/Common/LookupDto.cs b/BookieApi/src/Bookie.Application/DTOs/Common/LookupDto.cs new file mode 100644 index 0000000..8d0cc76 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Common/LookupDto.cs @@ -0,0 +1,8 @@ +namespace Bookie.Application.DTOs.Common; + +/// A minimal id/name pair for populating dropdowns in forms. +public class LookupDto +{ + public int Id { get; set; } + public string Name { get; set; } = ""; +} diff --git a/BookieApi/src/Bookie.Application/DTOs/Common/PagedResult.cs b/BookieApi/src/Bookie.Application/DTOs/Common/PagedResult.cs new file mode 100644 index 0000000..aca40f8 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Common/PagedResult.cs @@ -0,0 +1,64 @@ +namespace Bookie.Application.DTOs.Common; + +/// A page of results plus total count for server-side paging. +public class PagedResult +{ + public IReadOnlyList Items { get; set; } = new List(); + public int TotalCount { get; set; } + public int Page { get; set; } + public int PageSize { get; set; } + public int TotalPages => PageSize > 0 ? (int)Math.Ceiling(TotalCount / (double)PageSize) : 0; +} + +/// Common query parameters for list endpoints (paging / sorting / filtering). +public class PagedQuery +{ + private const int MaxPageSize = 200; + private int _pageSize = 20; + private int _page = 1; + + public int Page + { + get => _page; + set => _page = value < 1 ? 1 : value; + } + + public int PageSize + { + get => _pageSize; + set => _pageSize = value is < 1 or > MaxPageSize ? 20 : value; + } + + /// Free-text search term (interpreted per endpoint). + public string? Search { get; set; } + + /// Field name to sort by (interpreted per endpoint). + public string? SortBy { get; set; } + + /// True for descending order. + public bool SortDesc { get; set; } + + /// + /// Per-column filters as repeated Filters=key:value query parameters + /// (e.g. ?Filters=status:finished&Filters=teamId:41). Keys are interpreted per endpoint. + /// + public List Filters { get; set; } = new(); + + private Dictionary? _parsed; + + /// Returns the trimmed filter value for , or null when absent/blank. + public string? Filter(string key) + { + if (_parsed is null) + { + _parsed = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var entry in Filters) + { + var idx = entry.IndexOf(':'); + if (idx <= 0) continue; + _parsed[entry[..idx]] = entry[(idx + 1)..]; + } + } + return _parsed.TryGetValue(key, out var v) && !string.IsNullOrWhiteSpace(v) ? v.Trim() : null; + } +} diff --git a/BookieApi/src/Bookie.Application/DTOs/Contracts/PlayerContractDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Contracts/PlayerContractDtos.cs new file mode 100644 index 0000000..b559aa5 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Contracts/PlayerContractDtos.cs @@ -0,0 +1,37 @@ +using System.ComponentModel.DataAnnotations; + +namespace Bookie.Application.DTOs.Contracts; + +public class PlayerContractDto +{ + public int ContractId { get; set; } + public int PlayerId { get; set; } + public string PlayerName { get; set; } = ""; + public int TeamId { get; set; } + public string TeamName { get; set; } = ""; + public short? ShirtNumber { get; set; } + public DateOnly StartDate { get; set; } + public DateOnly? EndDate { get; set; } + public bool IsCurrent => EndDate is null; +} + +public class PlayerContractCreateDto : IValidatableObject +{ + [Required] public int PlayerId { get; set; } + [Required] public int TeamId { get; set; } + + [Range(1, 99)] + public short? ShirtNumber { get; set; } + + [Required] public DateOnly StartDate { get; set; } + public DateOnly? EndDate { get; set; } + + public IEnumerable Validate(ValidationContext validationContext) + { + if (EndDate.HasValue && EndDate.Value < StartDate) + yield return new ValidationResult("End date cannot be before start date.", + new[] { nameof(EndDate) }); + } +} + +public class PlayerContractUpdateDto : PlayerContractCreateDto { } diff --git a/BookieApi/src/Bookie.Application/DTOs/Dashboard/DashboardDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Dashboard/DashboardDtos.cs new file mode 100644 index 0000000..c9d359e --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Dashboard/DashboardDtos.cs @@ -0,0 +1,31 @@ +namespace Bookie.Application.DTOs.Dashboard; + +public class DashboardSummaryDto +{ + public int LeagueCount { get; set; } + public int SeasonCount { get; set; } + public int TeamCount { get; set; } + public int PlayerCount { get; set; } + public int MatchCount { get; set; } + public int UpcomingMatchesThisWeek { get; set; } + public int FinishedMatches { get; set; } + public List NextMatches { get; set; } = new(); + public List StatusBreakdown { get; set; } = new(); +} + +public class UpcomingMatchDto +{ + public int MatchId { get; set; } + public DateTime KickoffAt { get; set; } + public string HomeTeamName { get; set; } = ""; + public string AwayTeamName { get; set; } = ""; + public string LeagueName { get; set; } = ""; + public string Country { get; set; } = ""; + public string Status { get; set; } = ""; +} + +public class StatusBreakdownDto +{ + public string Status { get; set; } = ""; + public int Count { get; set; } +} diff --git a/BookieApi/src/Bookie.Application/DTOs/Leagues/LeagueDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Leagues/LeagueDtos.cs new file mode 100644 index 0000000..b071dde --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Leagues/LeagueDtos.cs @@ -0,0 +1,35 @@ +using System.ComponentModel.DataAnnotations; + +namespace Bookie.Application.DTOs.Leagues; + +public class LeagueDto +{ + public int LeagueId { get; set; } + public string Name { get; set; } = ""; + public string Country { get; set; } = ""; + public short TierLevel { get; set; } + public string CompetitionType { get; set; } = ""; + public string? Source { get; set; } + public int SeasonCount { get; set; } +} + +public class LeagueCreateDto +{ + [Required, MaxLength(100)] + public string Name { get; set; } = ""; + + [Required, MaxLength(100)] + public string Country { get; set; } = ""; + + [Range(1, 20)] + public short TierLevel { get; set; } = 1; + + [Required] + [RegularExpression("league|cup", ErrorMessage = "competition_type must be 'league' or 'cup'.")] + public string CompetitionType { get; set; } = "league"; + + [MaxLength(200)] + public string? Source { get; set; } +} + +public class LeagueUpdateDto : LeagueCreateDto { } diff --git a/BookieApi/src/Bookie.Application/DTOs/Matches/MatchDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Matches/MatchDtos.cs new file mode 100644 index 0000000..ae8146d --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Matches/MatchDtos.cs @@ -0,0 +1,61 @@ +using System.ComponentModel.DataAnnotations; + +namespace Bookie.Application.DTOs.Matches; + +public class MatchDto +{ + public int MatchId { get; set; } + public int MatchdayId { get; set; } + public short MatchdayNumber { get; set; } + public int SeasonId { get; set; } + public string SeasonName { get; set; } = ""; + public int LeagueId { get; set; } + public string LeagueName { get; set; } = ""; + public string Country { get; set; } = ""; + + public int HomeTeamId { get; set; } + public string HomeTeamName { get; set; } = ""; + public int AwayTeamId { get; set; } + public string AwayTeamName { get; set; } = ""; + + public DateTime KickoffAt { get; set; } + public string? Stadium { get; set; } + public string? Referee { get; set; } + public string Status { get; set; } = ""; + public short? HomeScoreHt { get; set; } + public short? AwayScoreHt { get; set; } + public short? HomeScoreFt { get; set; } + public short? AwayScoreFt { get; set; } + public string? DataSource { get; set; } +} + +public class MatchCreateDto : IValidatableObject +{ + [Required] public int MatchdayId { get; set; } + [Required] public int HomeTeamId { get; set; } + [Required] public int AwayTeamId { get; set; } + [Required] public DateTime KickoffAt { get; set; } + + [MaxLength(150)] public string? Stadium { get; set; } + [MaxLength(150)] public string? Referee { get; set; } + + [Required] + [RegularExpression("scheduled|live|finished|cancelled")] + public string Status { get; set; } = "scheduled"; + + public short? HomeScoreHt { get; set; } + public short? AwayScoreHt { get; set; } + public short? HomeScoreFt { get; set; } + public short? AwayScoreFt { get; set; } + + [MaxLength(200)] public string? DataSource { get; set; } + + public IEnumerable Validate(ValidationContext validationContext) + { + if (HomeTeamId == AwayTeamId) + yield return new ValidationResult("Home and away team must be different.", + new[] { nameof(AwayTeamId) }); + } +} + +public class MatchUpdateDto : MatchCreateDto { } diff --git a/BookieApi/src/Bookie.Application/DTOs/Players/PlayerDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Players/PlayerDtos.cs new file mode 100644 index 0000000..398d521 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Players/PlayerDtos.cs @@ -0,0 +1,29 @@ +using System.ComponentModel.DataAnnotations; + +namespace Bookie.Application.DTOs.Players; + +public class PlayerDto +{ + public int PlayerId { get; set; } + public string FullName { get; set; } = ""; + public DateOnly? BirthDate { get; set; } + public string? Nationality { get; set; } + public string? PrimaryPosition { get; set; } +} + +public class PlayerCreateDto +{ + [Required, MaxLength(150)] + public string FullName { get; set; } = ""; + + public DateOnly? BirthDate { get; set; } + + [MaxLength(100)] + public string? Nationality { get; set; } + + [MaxLength(20)] + [RegularExpression("GK|DF|MF|FW", ErrorMessage = "primary_position must be GK, DF, MF or FW.")] + public string? PrimaryPosition { get; set; } +} + +public class PlayerUpdateDto : PlayerCreateDto { } diff --git a/BookieApi/src/Bookie.Application/DTOs/Predictions/PredictionDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Predictions/PredictionDtos.cs new file mode 100644 index 0000000..1c3bc59 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Predictions/PredictionDtos.cs @@ -0,0 +1,46 @@ +namespace Bookie.Application.DTOs.Predictions; + +/// A single projected metric: a point estimate plus a plausible range. +public class MetricEstimateDto +{ + public double Estimate { get; set; } + public double Low { get; set; } + public double High { get; set; } +} + +/// Projected match events for one team. +public class TeamPredictionDto +{ + public MetricEstimateDto Goals { get; set; } = new(); + public MetricEstimateDto ShotsOnTarget { get; set; } = new(); + public MetricEstimateDto Corners { get; set; } = new(); + public MetricEstimateDto Fouls { get; set; } = new(); + public MetricEstimateDto YellowCards { get; set; } = new(); + public MetricEstimateDto RedCards { get; set; } = new(); +} + +/// Full statistical projection for one fixture, produced by the OpenAI model. +public class MatchPredictionDto +{ + public int MatchId { get; set; } + public string HomeTeam { get; set; } = ""; + public string AwayTeam { get; set; } = ""; + public string League { get; set; } = ""; + public string? Country { get; set; } + public DateTime KickoffAt { get; set; } + + public TeamPredictionDto Home { get; set; } = new(); + public TeamPredictionDto Away { get; set; } = new(); + + /// 3-5 sentence explanation of the key drivers behind the estimate. + public string Reasoning { get; set; } = ""; + + /// High / Medium / Low. + public string Confidence { get; set; } = "Low"; + + /// Any explicit data-quality flags (small sample, missing categories, data errors). + public List Flags { get; set; } = new(); + + /// The OpenAI model that produced this projection. + public string Model { get; set; } = ""; +} diff --git a/BookieApi/src/Bookie.Application/DTOs/Reports/HeadToHeadDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Reports/HeadToHeadDtos.cs new file mode 100644 index 0000000..93030ea --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Reports/HeadToHeadDtos.cs @@ -0,0 +1,39 @@ +namespace Bookie.Application.DTOs.Reports; + +/// Historical head-to-head record between two teams. +public class HeadToHeadDto +{ + public int TeamAId { get; set; } + public string TeamAName { get; set; } = ""; + public int TeamBId { get; set; } + public string TeamBName { get; set; } = ""; + + public int TotalMeetings { get; set; } + public int TeamAWins { get; set; } + public int Draws { get; set; } + public int TeamBWins { get; set; } + public int TeamAGoals { get; set; } + public int TeamBGoals { get; set; } + + public bool HasData => TotalMeetings > 0; + + /// Previous meetings, most recent first. + public List Meetings { get; set; } = new(); +} + +public class HeadToHeadMatchDto +{ + public int MatchId { get; set; } + public DateTime KickoffAt { get; set; } + public string Status { get; set; } = ""; + public string LeagueName { get; set; } = ""; + public string Country { get; set; } = ""; + public string SeasonName { get; set; } = ""; + + public int HomeTeamId { get; set; } + public string HomeTeamName { get; set; } = ""; + public int AwayTeamId { get; set; } + public string AwayTeamName { get; set; } = ""; + public short? HomeScoreFt { get; set; } + public short? AwayScoreFt { get; set; } +} diff --git a/BookieApi/src/Bookie.Application/DTOs/Reports/MatchDetailsDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Reports/MatchDetailsDtos.cs new file mode 100644 index 0000000..bdc3dc5 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Reports/MatchDetailsDtos.cs @@ -0,0 +1,112 @@ +namespace Bookie.Application.DTOs.Reports; + +/// Full statistics for a single match (used when drilling into a form result). +public class MatchDetailsDto +{ + public int MatchId { get; set; } + public DateTime KickoffAt { get; set; } + public string Status { get; set; } = ""; + public string? Stadium { get; set; } + public string? Referee { get; set; } + + public string LeagueName { get; set; } = ""; + public string Country { get; set; } = ""; + public string SeasonName { get; set; } = ""; + public short MatchdayNumber { get; set; } + + public int HomeTeamId { get; set; } + public string HomeTeamName { get; set; } = ""; + public int AwayTeamId { get; set; } + public string AwayTeamName { get; set; } = ""; + + public short? HomeScoreHt { get; set; } + public short? AwayScoreHt { get; set; } + public short? HomeScoreFt { get; set; } + public short? AwayScoreFt { get; set; } + public bool HasScore => Status == "finished" && HomeScoreFt.HasValue && AwayScoreFt.HasValue; + + public TeamMatchStatsDto? HomeStats { get; set; } + public TeamMatchStatsDto? AwayStats { get; set; } + + public MatchTeamPredictionDto? HomePrediction { get; set; } + public MatchTeamPredictionDto? AwayPrediction { get; set; } + public bool HasPrediction => HomePrediction != null || AwayPrediction != null; + + public MatchTeamOpenAiPredictionDto? HomeOpenAiPrediction { get; set; } + public MatchTeamOpenAiPredictionDto? AwayOpenAiPrediction { get; set; } + public bool HasOpenAiPrediction => HomeOpenAiPrediction != null || AwayOpenAiPrediction != null; + + public List Goals { get; set; } = new(); + public List Cards { get; set; } = new(); + public List Penalties { get; set; } = new(); +} + +public class TeamMatchStatsDto +{ + public decimal? PossessionPct { get; set; } + public short? ShotsTotal { get; set; } + public short? ShotsOnTarget { get; set; } + public short? Corners { get; set; } + public short? Fouls { get; set; } + public short? Offsides { get; set; } + public short YellowCards { get; set; } + public short RedCards { get; set; } +} + +/// Model-generated statistical prediction for one team in a match. +public class MatchTeamPredictionDto +{ + public decimal? PredictedGoals { get; set; } + public decimal? PredictedShotsTotal { get; set; } + public decimal? PredictedShotsOnTarget { get; set; } + public decimal? PredictedCorners { get; set; } + public decimal? PredictedFouls { get; set; } + public decimal? PredictedYellowCards { get; set; } + public DateTime ModelTrainedAt { get; set; } + public int? HalfLifeDays { get; set; } + public DateTime PredictedAt { get; set; } +} + +/// OpenAI-generated projection for one team in a match (latest stored run). +public class MatchTeamOpenAiPredictionDto +{ + public decimal? PredictedGoals { get; set; } + public decimal? PredictedShotsOnTarget { get; set; } + public decimal? PredictedCorners { get; set; } + public decimal? PredictedFouls { get; set; } + public decimal? PredictedYellowCards { get; set; } + public decimal? PredictedRedCards { get; set; } + public string? Confidence { get; set; } + public string? Model { get; set; } + public DateTime PredictedAt { get; set; } +} + +public class GoalDetailDto +{ + public int TeamId { get; set; } + public bool IsHome { get; set; } + public string ScorerName { get; set; } = ""; + public string? AssistName { get; set; } + public short Minute { get; set; } + public short AddedTime { get; set; } + public string GoalType { get; set; } = ""; +} + +public class CardDetailDto +{ + public int TeamId { get; set; } + public bool IsHome { get; set; } + public string PlayerName { get; set; } = ""; + public short Minute { get; set; } + public string CardType { get; set; } = ""; + public string? Reason { get; set; } +} + +public class PenaltyDetailDto +{ + public int TeamId { get; set; } + public bool IsHome { get; set; } + public string? PlayerName { get; set; } + public short? Minute { get; set; } + public string Result { get; set; } = ""; +} diff --git a/BookieApi/src/Bookie.Application/DTOs/Reports/PreMatchReportDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Reports/PreMatchReportDtos.cs new file mode 100644 index 0000000..f72a7b5 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Reports/PreMatchReportDtos.cs @@ -0,0 +1,213 @@ +namespace Bookie.Application.DTOs.Reports; + +/// Root response for GET /api/reports/pre-match?date=YYYY-MM-DD. +public class PreMatchReportDto +{ + public DateOnly Date { get; set; } + public int MatchCount { get; set; } + + /// How many previous seasons were folded into the stats (0 = current season only). + public int SeasonsBack { get; set; } + + public List Groups { get; set; } = new(); +} + +/// Matches grouped by league/country/season (ordered by country, league name). +public class LeagueGroupDto +{ + public int LeagueId { get; set; } + public string LeagueName { get; set; } = ""; + public string Country { get; set; } = ""; + public int SeasonId { get; set; } + public string SeasonName { get; set; } = ""; + public List Matches { get; set; } = new(); + + /// Trained Dixon-Coles league parameters (bookie.league_model_param), if available. + public LeagueModelParamDto? ModelParams { get; set; } +} + +/// A single match with pre-match analysis for both teams. +public class MatchReportDto +{ + public int MatchId { get; set; } + public DateTime KickoffAt { get; set; } + public string Status { get; set; } = ""; + public string? Stadium { get; set; } + public string? Referee { get; set; } + + public int HomeTeamId { get; set; } + public string HomeTeamName { get; set; } = ""; + public int AwayTeamId { get; set; } + public string AwayTeamName { get; set; } = ""; + + public short? HomeScoreHt { get; set; } + public short? AwayScoreHt { get; set; } + public short? HomeScoreFt { get; set; } + public short? AwayScoreFt { get; set; } + + /// True only when status == finished and full-time scores are present. + public bool HasScore => Status == "finished" && HomeScoreFt.HasValue && AwayScoreFt.HasValue; + + /// Names of the seasons folded into this match's stats, oldest -> newest. + public List SeasonsIncluded { get; set; } = new(); + + public TeamReportDto Home { get; set; } = new(); + public TeamReportDto Away { get; set; } = new(); + + /// Averaged 1X2 market odds for this match (bookie.match_odds), if any. + public MatchOddsSummaryDto? Odds { get; set; } + + /// Over/under corners or cards markets (bookie.match_extra_odds), if any. + public List ExtraOdds { get; set; } = new(); +} + +/// Pre-match stats for one team, based only on matches before this match's kickoff. +public class TeamReportDto +{ + public int TeamId { get; set; } + public string TeamName { get; set; } = ""; + + /// Number of earlier finished matches used for goals/form. + public int MatchesPlayed { get; set; } + + /// False when there is no historical data yet (matches_played = 0). + public bool HasHistory { get; set; } + + public GoalsForAgainstDto GoalsForAgainst { get; set; } = new(); + public SeasonAveragesDto SeasonAverages { get; set; } = new(); + + /// Last 5 results oldest -> newest, each with the match it came from. + public List Form { get; set; } = new(); + + public List TopScorers { get; set; } = new(); + + /// Stored model prediction for this team in this match (from bookie.match_prediction), if any. + public MatchTeamPredictionDto? Prediction { get; set; } + + /// Latest OpenAI prediction for this team in this match (from bookie.match_prediction_openai), if any. + public MatchTeamOpenAiPredictionDto? OpenAiPrediction { get; set; } + + /// What this team actually recorded in this match (finished games with stats/score only). + public MatchTeamActualDto? Actual { get; set; } + + /// Trained attack/defense ratings for this team in the match league (bookie.team_strength). + public TeamStrengthDto? Strength { get; set; } + + /// Odds API name alias when mapped (bookie.team_odds_alias). + public string? OddsApiName { get; set; } +} + +/// Real outcomes for one team in a single finished match. +public class MatchTeamActualDto +{ + public int? Goals { get; set; } + public short? ShotsTotal { get; set; } + public short? ShotsOnTarget { get; set; } + public short? Corners { get; set; } + public short? Fouls { get; set; } + public short YellowCards { get; set; } + public short RedCards { get; set; } + + public bool HasData => + Goals != null || ShotsTotal != null || ShotsOnTarget != null || Corners != null + || Fouls != null || YellowCards > 0 || RedCards > 0; +} + +/// A single W/D/L result together with the match that produced it. +public class FormResultDto +{ + /// "W" / "D" / "L". + public string Result { get; set; } = ""; + public int MatchId { get; set; } + public DateTime KickoffAt { get; set; } + public string OpponentName { get; set; } = ""; + public bool IsHome { get; set; } + public int GoalsFor { get; set; } + public int GoalsAgainst { get; set; } +} + +public class GoalsForAgainstDto +{ + public int MatchesPlayed { get; set; } + public decimal? AvgGoalsFor { get; set; } + public decimal? AvgGoalsAgainst { get; set; } + public bool HasData => MatchesPlayed > 0; +} + +public class SeasonAveragesDto +{ + /// Number of match_team_stats rows averaged. + public int MatchesPlayed { get; set; } + public decimal? Possession { get; set; } + public decimal? ShotsTotal { get; set; } + public decimal? ShotsOnTarget { get; set; } + public decimal? Corners { get; set; } + public decimal? Fouls { get; set; } + public decimal? Offsides { get; set; } + public decimal? YellowCards { get; set; } + public decimal? RedCards { get; set; } + public bool HasData => MatchesPlayed > 0; +} + +public class TopScorerDto +{ + public string PlayerName { get; set; } = ""; + public int Goals { get; set; } + public int Assists { get; set; } +} + +/// Dixon-Coles parameters for a league (bookie.league_model_param). +public class LeagueModelParamDto +{ + public decimal HomeAdvantage { get; set; } + public decimal Rho { get; set; } + public decimal? AvgHomeGoals { get; set; } + public decimal? AvgAwayGoals { get; set; } + public int MatchesUsed { get; set; } + public int? HalfLifeDays { get; set; } + public DateTime TrainedAt { get; set; } +} + +/// Attack/defense strength for one team in one league (bookie.team_strength). +public class TeamStrengthDto +{ + public decimal LogAttack { get; set; } + public decimal LogDefense { get; set; } + public decimal AttackFactor { get; set; } + public decimal DefenseFactor { get; set; } + public int MatchesUsed { get; set; } + public DateTime TrainedAt { get; set; } +} + +/// Consensus 1X2 odds averaged across bookmakers for one match. +public class MatchOddsSummaryDto +{ + public int BookmakerCount { get; set; } + public decimal AvgHomeOdds { get; set; } + public decimal AvgDrawOdds { get; set; } + public decimal AvgAwayOdds { get; set; } + public decimal HomeImplied { get; set; } + public decimal DrawImplied { get; set; } + public decimal AwayImplied { get; set; } + + /// Averaged totals line (e.g. goals O/U) when bookmakers publish one. + public decimal? AvgTotalLine { get; set; } + public decimal? AvgOverOdds { get; set; } + public decimal? AvgUnderOdds { get; set; } + public decimal? OverImplied { get; set; } + public decimal? UnderImplied { get; set; } + public int TotalsBookmakerCount { get; set; } + + public DateTime LatestFetchedAt { get; set; } +} + +/// One over/under market line from bookie.match_extra_odds. +public class MatchExtraOddsDto +{ + public string Market { get; set; } = ""; + public string Bookmaker { get; set; } = ""; + public decimal Line { get; set; } + public decimal OverOdds { get; set; } + public decimal UnderOdds { get; set; } + public DateTime FetchedAt { get; set; } +} diff --git a/BookieApi/src/Bookie.Application/DTOs/Seasons/SeasonDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Seasons/SeasonDtos.cs new file mode 100644 index 0000000..637867d --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Seasons/SeasonDtos.cs @@ -0,0 +1,30 @@ +using System.ComponentModel.DataAnnotations; + +namespace Bookie.Application.DTOs.Seasons; + +public class SeasonDto +{ + public int SeasonId { get; set; } + public int LeagueId { get; set; } + public string LeagueName { get; set; } = ""; + public string Country { get; set; } = ""; + public string Name { get; set; } = ""; + public DateOnly StartDate { get; set; } + public DateOnly? EndDate { get; set; } +} + +public class SeasonCreateDto +{ + [Required] + public int LeagueId { get; set; } + + [Required, MaxLength(20)] + public string Name { get; set; } = ""; + + [Required] + public DateOnly StartDate { get; set; } + + public DateOnly? EndDate { get; set; } +} + +public class SeasonUpdateDto : SeasonCreateDto { } diff --git a/BookieApi/src/Bookie.Application/DTOs/Stats/StatsDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Stats/StatsDtos.cs new file mode 100644 index 0000000..4e64046 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Stats/StatsDtos.cs @@ -0,0 +1,99 @@ +using Bookie.Application.DTOs.Reports; + +namespace Bookie.Application.DTOs.Stats; + +// ---- Player ---- + +public class PlayerStatsDto +{ + public int PlayerId { get; set; } + public string FullName { get; set; } = ""; + public string? Nationality { get; set; } + public string? PrimaryPosition { get; set; } + public DateOnly? BirthDate { get; set; } + public string? CurrentTeam { get; set; } + + public int TotalGoals { get; set; } + public int TotalAssists { get; set; } + public int MatchesScored { get; set; } + public int GoalsOpenPlay { get; set; } + public int GoalsPenalty { get; set; } + public int GoalsOwn { get; set; } + public int YellowCards { get; set; } + public int RedCards { get; set; } + + public bool HasData => TotalGoals > 0 || TotalAssists > 0 || YellowCards > 0 || RedCards > 0; + + public List Seasons { get; set; } = new(); + public List RecentGoals { get; set; } = new(); +} + +public class PlayerSeasonStatDto +{ + public string SeasonName { get; set; } = ""; + public string LeagueName { get; set; } = ""; + public int Goals { get; set; } + public int Assists { get; set; } +} + +public class PlayerGoalDto +{ + public int MatchId { get; set; } + public DateTime KickoffAt { get; set; } + public string HomeTeamName { get; set; } = ""; + public string AwayTeamName { get; set; } = ""; + public short Minute { get; set; } + public short AddedTime { get; set; } + public string GoalType { get; set; } = ""; +} + +// ---- Team ---- + +public class TeamStatsDto +{ + public int TeamId { get; set; } + public string Name { get; set; } = ""; + public string? City { get; set; } + public string? Stadium { get; set; } + + public int Played { get; set; } + public int Wins { get; set; } + public int Draws { get; set; } + public int Losses { get; set; } + public int GoalsFor { get; set; } + public int GoalsAgainst { get; set; } + public int GoalDifference => GoalsFor - GoalsAgainst; + public double WinPct => Played > 0 ? Math.Round(Wins * 100.0 / Played, 1) : 0; + + public bool HasData => Played > 0; + + public SeasonAveragesDto Averages { get; set; } = new(); + public List Form { get; set; } = new(); + public List TopScorers { get; set; } = new(); + public List Seasons { get; set; } = new(); + public List RecentMatches { get; set; } = new(); +} + +public class TeamSeasonStatDto +{ + public string SeasonName { get; set; } = ""; + public string LeagueName { get; set; } = ""; + public int Played { get; set; } + public int Wins { get; set; } + public int Draws { get; set; } + public int Losses { get; set; } + public int GoalsFor { get; set; } + public int GoalsAgainst { get; set; } +} + +public class TeamRecentMatchDto +{ + public int MatchId { get; set; } + public DateTime KickoffAt { get; set; } + public string LeagueName { get; set; } = ""; + public string SeasonName { get; set; } = ""; + public string HomeTeamName { get; set; } = ""; + public string AwayTeamName { get; set; } = ""; + public short? HomeScoreFt { get; set; } + public short? AwayScoreFt { get; set; } +} diff --git a/BookieApi/src/Bookie.Application/DTOs/Teams/TeamDtos.cs b/BookieApi/src/Bookie.Application/DTOs/Teams/TeamDtos.cs new file mode 100644 index 0000000..9a43153 --- /dev/null +++ b/BookieApi/src/Bookie.Application/DTOs/Teams/TeamDtos.cs @@ -0,0 +1,32 @@ +using System.ComponentModel.DataAnnotations; + +namespace Bookie.Application.DTOs.Teams; + +public class TeamDto +{ + public int TeamId { get; set; } + public string Name { get; set; } = ""; + public string? ShortName { get; set; } + public string? City { get; set; } + public string? Stadium { get; set; } + public DateOnly? FoundedDate { get; set; } +} + +public class TeamCreateDto +{ + [Required, MaxLength(100)] + public string Name { get; set; } = ""; + + [MaxLength(10)] + public string? ShortName { get; set; } + + [MaxLength(100)] + public string? City { get; set; } + + [MaxLength(150)] + public string? Stadium { get; set; } + + public DateOnly? FoundedDate { get; set; } +} + +public class TeamUpdateDto : TeamCreateDto { } diff --git a/BookieApi/src/Bookie.Application/Interfaces/CrudServices.cs b/BookieApi/src/Bookie.Application/Interfaces/CrudServices.cs new file mode 100644 index 0000000..4b105cd --- /dev/null +++ b/BookieApi/src/Bookie.Application/Interfaces/CrudServices.cs @@ -0,0 +1,29 @@ +using Bookie.Application.DTOs.Contracts; +using Bookie.Application.DTOs.Leagues; +using Bookie.Application.DTOs.Matches; +using Bookie.Application.DTOs.Players; +using Bookie.Application.DTOs.Seasons; +using Bookie.Application.DTOs.Teams; + +namespace Bookie.Application.Interfaces; + +public interface ILeagueService : ICrudService { } + +public interface ISeasonService : ICrudService +{ + Task> GetByLeagueAsync(int leagueId, CancellationToken ct = default); +} + +public interface ITeamService : ICrudService +{ + Task> GetAllAsync(CancellationToken ct = default); +} + +public interface IPlayerService : ICrudService { } + +public interface IMatchService : ICrudService { } + +public interface IPlayerContractService : ICrudService +{ + Task> GetByPlayerAsync(int playerId, CancellationToken ct = default); +} diff --git a/BookieApi/src/Bookie.Application/Interfaces/IAuthService.cs b/BookieApi/src/Bookie.Application/Interfaces/IAuthService.cs new file mode 100644 index 0000000..7cba44d --- /dev/null +++ b/BookieApi/src/Bookie.Application/Interfaces/IAuthService.cs @@ -0,0 +1,9 @@ +using Bookie.Application.DTOs.Auth; + +namespace Bookie.Application.Interfaces; + +public interface IAuthService +{ + /// Returns a JWT response on success, or null when credentials are invalid. + AuthResponseDto? Login(LoginRequestDto request); +} diff --git a/BookieApi/src/Bookie.Application/Interfaces/ICrudService.cs b/BookieApi/src/Bookie.Application/Interfaces/ICrudService.cs new file mode 100644 index 0000000..b3b5012 --- /dev/null +++ b/BookieApi/src/Bookie.Application/Interfaces/ICrudService.cs @@ -0,0 +1,16 @@ +using Bookie.Application.DTOs.Common; + +namespace Bookie.Application.Interfaces; + +/// +/// Generic CRUD contract shared by the standard entity services. +/// TRead = read DTO, TCreate = create payload, TUpdate = update payload, TKey = key type. +/// +public interface ICrudService +{ + Task> GetPagedAsync(PagedQuery query, CancellationToken ct = default); + Task GetByIdAsync(TKey id, CancellationToken ct = default); + Task CreateAsync(TCreate dto, CancellationToken ct = default); + Task UpdateAsync(TKey id, TUpdate dto, CancellationToken ct = default); + Task DeleteAsync(TKey id, CancellationToken ct = default); +} diff --git a/BookieApi/src/Bookie.Application/Interfaces/IDashboardService.cs b/BookieApi/src/Bookie.Application/Interfaces/IDashboardService.cs new file mode 100644 index 0000000..a9ea75d --- /dev/null +++ b/BookieApi/src/Bookie.Application/Interfaces/IDashboardService.cs @@ -0,0 +1,8 @@ +using Bookie.Application.DTOs.Dashboard; + +namespace Bookie.Application.Interfaces; + +public interface IDashboardService +{ + Task GetSummaryAsync(CancellationToken ct = default); +} diff --git a/BookieApi/src/Bookie.Application/Interfaces/ILookupService.cs b/BookieApi/src/Bookie.Application/Interfaces/ILookupService.cs new file mode 100644 index 0000000..21cb663 --- /dev/null +++ b/BookieApi/src/Bookie.Application/Interfaces/ILookupService.cs @@ -0,0 +1,12 @@ +using Bookie.Application.DTOs.Common; + +namespace Bookie.Application.Interfaces; + +public interface ILookupService +{ + Task> LeaguesAsync(CancellationToken ct = default); + Task> SeasonsAsync(int? leagueId = null, CancellationToken ct = default); + Task> TeamsAsync(int? leagueId = null, int? seasonId = null, CancellationToken ct = default); + Task> PlayersAsync(CancellationToken ct = default); + Task> MatchdaysAsync(CancellationToken ct = default); +} diff --git a/BookieApi/src/Bookie.Application/Interfaces/IPreMatchReportService.cs b/BookieApi/src/Bookie.Application/Interfaces/IPreMatchReportService.cs new file mode 100644 index 0000000..c8106c2 --- /dev/null +++ b/BookieApi/src/Bookie.Application/Interfaces/IPreMatchReportService.cs @@ -0,0 +1,23 @@ +using Bookie.Application.DTOs.Reports; + +namespace Bookie.Application.Interfaces; + +public interface IPreMatchReportService +{ + /// + /// Builds the pre-match report for all matches on , grouped + /// by league/country/season. For each team, stats are computed using ONLY matches + /// strictly before that match's kickoff, excluding the match itself, within the current + /// season plus up to previous seasons of the same league. + /// + Task GetPreMatchReportAsync(DateOnly date, int seasonsBack = 0, CancellationToken ct = default); + + /// Full per-match statistics (team stats, goals, cards, penalties) for a single match. + Task GetMatchDetailsAsync(int matchId, CancellationToken ct = default); + + /// + /// Historical head-to-head between two teams. When is given, + /// only finished meetings strictly before that match's kickoff (and excluding it) are returned. + /// + Task GetHeadToHeadAsync(int teamAId, int teamBId, int? beforeMatchId, CancellationToken ct = default); +} diff --git a/BookieApi/src/Bookie.Application/Interfaces/IPredictionService.cs b/BookieApi/src/Bookie.Application/Interfaces/IPredictionService.cs new file mode 100644 index 0000000..af8f983 --- /dev/null +++ b/BookieApi/src/Bookie.Application/Interfaces/IPredictionService.cs @@ -0,0 +1,20 @@ +using Bookie.Application.DTOs.Predictions; + +namespace Bookie.Application.Interfaces; + +/// +/// Produces a statistical projection of match events (goals, cards, fouls, corners, +/// shots on target) for a single fixture by feeding structured historical data to an +/// OpenAI model with a dedicated "Football Match Statistics Predictor" system prompt. +/// +public interface IPredictionService +{ + /// Builds the input data for and returns the model's projection. + Task PredictMatchAsync(int matchId, CancellationToken ct = default); + + /// + /// Projects several fixtures in a single model call (the predictor prompt is batch-oriented). + /// Returns one projection per resolvable match id, in the order supplied. + /// + Task> PredictMatchesAsync(IReadOnlyList matchIds, CancellationToken ct = default); +} diff --git a/BookieApi/src/Bookie.Application/Interfaces/IStatsService.cs b/BookieApi/src/Bookie.Application/Interfaces/IStatsService.cs new file mode 100644 index 0000000..16dbba3 --- /dev/null +++ b/BookieApi/src/Bookie.Application/Interfaces/IStatsService.cs @@ -0,0 +1,10 @@ +using Bookie.Application.DTOs.Stats; + +namespace Bookie.Application.Interfaces; + +/// Aggregated career/overall statistics for players and teams. +public interface IStatsService +{ + Task GetPlayerStatsAsync(int playerId, CancellationToken ct = default); + Task GetTeamStatsAsync(int teamId, CancellationToken ct = default); +} diff --git a/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.deps.json b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.deps.json new file mode 100644 index 0000000..1607ecd --- /dev/null +++ b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.deps.json @@ -0,0 +1,73 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v10.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v10.0": { + "Bookie.Application/1.0.0": { + "dependencies": { + "Bookie.Domain": "1.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11" + }, + "runtime": { + "Bookie.Application.dll": {} + } + }, + "Microsoft.Extensions.Configuration.Abstractions/10.0.11": { + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Microsoft.Extensions.Primitives/10.0.11": { + "runtime": { + "lib/net10.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Bookie.Domain/1.0.0": { + "runtime": { + "Bookie.Domain.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + } + } + }, + "libraries": { + "Bookie.Application/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Microsoft.Extensions.Configuration.Abstractions/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fVi053xdpda9Em7vSkmgVxO/PtgC2m78ekReKWsgcyskqY0U82Bz/MONwxpGzI0hElYKJfw+fupqMVeKW3fSaA==", + "path": "microsoft.extensions.configuration.abstractions/10.0.11", + "hashPath": "microsoft.extensions.configuration.abstractions.10.0.11.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SXcz+kF+4Oo9b1+55zntpJFYfwb1jw66ioxptyNOOTDc8g2FHnBFWjZpsWfCvZIhzr0x+4e2trVTs4OKwQfBtw==", + "path": "microsoft.extensions.primitives/10.0.11", + "hashPath": "microsoft.extensions.primitives.10.0.11.nupkg.sha512" + }, + "Bookie.Domain/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.dll b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.dll new file mode 100644 index 0000000..d346a56 Binary files /dev/null and b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.dll differ diff --git a/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.pdb b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.pdb new file mode 100644 index 0000000..34dac61 Binary files /dev/null and b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.pdb differ diff --git a/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Domain.dll b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Domain.dll new file mode 100644 index 0000000..0a94d58 Binary files /dev/null and b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Domain.dll differ diff --git a/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Domain.pdb b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Domain.pdb new file mode 100644 index 0000000..85e64d9 Binary files /dev/null and b/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Domain.pdb differ diff --git a/BookieApi/src/Bookie.Application/obj/Bookie.Application.csproj.nuget.dgspec.json b/BookieApi/src/Bookie.Application/obj/Bookie.Application.csproj.nuget.dgspec.json new file mode 100644 index 0000000..7b31154 --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Bookie.Application.csproj.nuget.dgspec.json @@ -0,0 +1,686 @@ +{ + "format": 1, + "restore": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj": {} + }, + "projects": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj", + "projectName": "Bookie.Application", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[10.0.11, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "projectName": "Bookie.Domain", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Application/obj/Bookie.Application.csproj.nuget.g.props b/BookieApi/src/Bookie.Application/obj/Bookie.Application.csproj.nuget.g.props new file mode 100644 index 0000000..3de9b3e --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Bookie.Application.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /Users/piotrkus/.nuget/packages/ + /Users/piotrkus/.nuget/packages/ + PackageReference + 7.0.0 + + + + + \ No newline at end of file diff --git a/BookieApi/src/Bookie.Application/obj/Bookie.Application.csproj.nuget.g.targets b/BookieApi/src/Bookie.Application/obj/Bookie.Application.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Bookie.Application.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs new file mode 100644 index 0000000..925b135 --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")] diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.A.46972FEB.Up2Date b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.A.46972FEB.Up2Date new file mode 100644 index 0000000..e69de29 diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.AssemblyInfo.cs b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.AssemblyInfo.cs new file mode 100644 index 0000000..debee51 --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Bookie.Application")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Bookie.Application")] +[assembly: System.Reflection.AssemblyTitleAttribute("Bookie.Application")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Wygenerowane przez klasę WriteCodeFragment programu MSBuild. + diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.AssemblyInfoInputs.cache b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.AssemblyInfoInputs.cache new file mode 100644 index 0000000..32dd4d7 --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +06a808ad930955ea39982ef229672f8e0cc3a1457337f131f6a245153fcc7340 diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.GeneratedMSBuildEditorConfig.editorconfig b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..98d32b0 --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,17 @@ +is_global = true +build_property.TargetFramework = net10.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v10.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Bookie.Application +build_property.ProjectDir = /Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 10.0 +build_property.EnableCodeStyleSeverity = diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.GlobalUsings.g.cs b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.GlobalUsings.g.cs new file mode 100644 index 0000000..d12bcbc --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.assets.cache b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.assets.cache new file mode 100644 index 0000000..931154b Binary files /dev/null and b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.assets.cache differ diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.AssemblyReference.cache b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.AssemblyReference.cache new file mode 100644 index 0000000..ab6d18f Binary files /dev/null and b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.AssemblyReference.cache differ diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.CoreCompileInputs.cache b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..7c6be49 --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +9068d273ce9c712dad73a18425d8c2580a909572582a9afde55aa763299e63d0 diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.FileListAbsolute.txt b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..1c03276 --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.FileListAbsolute.txt @@ -0,0 +1,15 @@ +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.deps.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Application.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Domain.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/bin/Debug/net10.0/Bookie.Domain.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.AssemblyReference.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.GeneratedMSBuildEditorConfig.editorconfig +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.AssemblyInfoInputs.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.AssemblyInfo.cs +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.csproj.CoreCompileInputs.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.A.46972FEB.Up2Date +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/refint/Bookie.Application.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/Debug/net10.0/ref/Bookie.Application.dll diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.dll b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.dll new file mode 100644 index 0000000..d346a56 Binary files /dev/null and b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.dll differ diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.pdb b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.pdb new file mode 100644 index 0000000..34dac61 Binary files /dev/null and b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/Bookie.Application.pdb differ diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/ref/Bookie.Application.dll b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/ref/Bookie.Application.dll new file mode 100644 index 0000000..8d81ca1 Binary files /dev/null and b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/ref/Bookie.Application.dll differ diff --git a/BookieApi/src/Bookie.Application/obj/Debug/net10.0/refint/Bookie.Application.dll b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/refint/Bookie.Application.dll new file mode 100644 index 0000000..8d81ca1 Binary files /dev/null and b/BookieApi/src/Bookie.Application/obj/Debug/net10.0/refint/Bookie.Application.dll differ diff --git a/BookieApi/src/Bookie.Application/obj/project.assets.json b/BookieApi/src/Bookie.Application/obj/project.assets.json new file mode 100644 index 0000000..7aff00f --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/project.assets.json @@ -0,0 +1,470 @@ +{ + "version": 3, + "targets": { + "net10.0": { + "Microsoft.Extensions.Configuration.Abstractions/10.0.11": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Primitives/10.0.11": { + "type": "package", + "compile": { + "lib/net10.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Bookie.Domain/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v10.0", + "compile": { + "bin/placeholder/Bookie.Domain.dll": {} + }, + "runtime": { + "bin/placeholder/Bookie.Domain.dll": {} + } + } + } + }, + "libraries": { + "Microsoft.Extensions.Configuration.Abstractions/10.0.11": { + "sha512": "fVi053xdpda9Em7vSkmgVxO/PtgC2m78ekReKWsgcyskqY0U82Bz/MONwxpGzI0hElYKJfw+fupqMVeKW3fSaA==", + "type": "package", + "path": "microsoft.extensions.configuration.abstractions/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Abstractions.targets", + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "microsoft.extensions.configuration.abstractions.10.0.11.nupkg.sha512", + "microsoft.extensions.configuration.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Primitives/10.0.11": { + "sha512": "SXcz+kF+4Oo9b1+55zntpJFYfwb1jw66ioxptyNOOTDc8g2FHnBFWjZpsWfCvZIhzr0x+4e2trVTs4OKwQfBtw==", + "type": "package", + "path": "microsoft.extensions.primitives/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", + "lib/net10.0/Microsoft.Extensions.Primitives.dll", + "lib/net10.0/Microsoft.Extensions.Primitives.xml", + "lib/net462/Microsoft.Extensions.Primitives.dll", + "lib/net462/Microsoft.Extensions.Primitives.xml", + "lib/net8.0/Microsoft.Extensions.Primitives.dll", + "lib/net8.0/Microsoft.Extensions.Primitives.xml", + "lib/net9.0/Microsoft.Extensions.Primitives.dll", + "lib/net9.0/Microsoft.Extensions.Primitives.xml", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", + "microsoft.extensions.primitives.10.0.11.nupkg.sha512", + "microsoft.extensions.primitives.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Bookie.Domain/1.0.0": { + "type": "project", + "path": "../Bookie.Domain/Bookie.Domain.csproj", + "msbuildProject": "../Bookie.Domain/Bookie.Domain.csproj" + } + }, + "projectFileDependencyGroups": { + "net10.0": [ + "Bookie.Domain >= 1.0.0", + "Microsoft.Extensions.Configuration.Abstractions >= 10.0.11" + ] + }, + "packageFolders": { + "/Users/piotrkus/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj", + "projectName": "Bookie.Application", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[10.0.11, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Application/obj/project.nuget.cache b/BookieApi/src/Bookie.Application/obj/project.nuget.cache new file mode 100644 index 0000000..4a57a37 --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/project.nuget.cache @@ -0,0 +1,11 @@ +{ + "version": 2, + "dgSpecHash": "rXQq/+G/Pac=", + "success": true, + "projectFilePath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj", + "expectedPackageFiles": [ + "/Users/piotrkus/.nuget/packages/microsoft.extensions.configuration.abstractions/10.0.11/microsoft.extensions.configuration.abstractions.10.0.11.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.primitives/10.0.11/microsoft.extensions.primitives.10.0.11.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Application/obj/project.packagespec.json b/BookieApi/src/Bookie.Application/obj/project.packagespec.json new file mode 100644 index 0000000..ee84ae1 --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/project.packagespec.json @@ -0,0 +1 @@ +"restore":{"projectUniqueName":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj","projectName":"Bookie.Application","projectPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj","packagesPath":"","outputPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net10.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net10.0":{"targetAlias":"net10.0","projectReferences":{"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj":{"projectPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"all"},"SdkAnalysisLevel":"10.0.200"}"frameworks":{"net10.0":{"targetAlias":"net10.0","dependencies":{"Microsoft.Extensions.Configuration.Abstractions":{"target":"Package","version":"[10.0.11, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json","packagesToPrune":{"Microsoft.CSharp":"(,4.7.32767]","Microsoft.VisualBasic":"(,10.4.32767]","Microsoft.Win32.Primitives":"(,4.3.32767]","Microsoft.Win32.Registry":"(,5.0.32767]","runtime.any.System.Collections":"(,4.3.32767]","runtime.any.System.Diagnostics.Tools":"(,4.3.32767]","runtime.any.System.Diagnostics.Tracing":"(,4.3.32767]","runtime.any.System.Globalization":"(,4.3.32767]","runtime.any.System.Globalization.Calendars":"(,4.3.32767]","runtime.any.System.IO":"(,4.3.32767]","runtime.any.System.Reflection":"(,4.3.32767]","runtime.any.System.Reflection.Extensions":"(,4.3.32767]","runtime.any.System.Reflection.Primitives":"(,4.3.32767]","runtime.any.System.Resources.ResourceManager":"(,4.3.32767]","runtime.any.System.Runtime":"(,4.3.32767]","runtime.any.System.Runtime.Handles":"(,4.3.32767]","runtime.any.System.Runtime.InteropServices":"(,4.3.32767]","runtime.any.System.Text.Encoding":"(,4.3.32767]","runtime.any.System.Text.Encoding.Extensions":"(,4.3.32767]","runtime.any.System.Threading.Tasks":"(,4.3.32767]","runtime.any.System.Threading.Timer":"(,4.3.32767]","runtime.aot.System.Collections":"(,4.3.32767]","runtime.aot.System.Diagnostics.Tools":"(,4.3.32767]","runtime.aot.System.Diagnostics.Tracing":"(,4.3.32767]","runtime.aot.System.Globalization":"(,4.3.32767]","runtime.aot.System.Globalization.Calendars":"(,4.3.32767]","runtime.aot.System.IO":"(,4.3.32767]","runtime.aot.System.Reflection":"(,4.3.32767]","runtime.aot.System.Reflection.Extensions":"(,4.3.32767]","runtime.aot.System.Reflection.Primitives":"(,4.3.32767]","runtime.aot.System.Resources.ResourceManager":"(,4.3.32767]","runtime.aot.System.Runtime":"(,4.3.32767]","runtime.aot.System.Runtime.Handles":"(,4.3.32767]","runtime.aot.System.Runtime.InteropServices":"(,4.3.32767]","runtime.aot.System.Text.Encoding":"(,4.3.32767]","runtime.aot.System.Text.Encoding.Extensions":"(,4.3.32767]","runtime.aot.System.Threading.Tasks":"(,4.3.32767]","runtime.aot.System.Threading.Timer":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.unix.Microsoft.Win32.Primitives":"(,4.3.32767]","runtime.unix.System.Console":"(,4.3.32767]","runtime.unix.System.Diagnostics.Debug":"(,4.3.32767]","runtime.unix.System.IO.FileSystem":"(,4.3.32767]","runtime.unix.System.Net.Primitives":"(,4.3.32767]","runtime.unix.System.Net.Sockets":"(,4.3.32767]","runtime.unix.System.Private.Uri":"(,4.3.32767]","runtime.unix.System.Runtime.Extensions":"(,4.3.32767]","runtime.win.Microsoft.Win32.Primitives":"(,4.3.32767]","runtime.win.System.Console":"(,4.3.32767]","runtime.win.System.Diagnostics.Debug":"(,4.3.32767]","runtime.win.System.IO.FileSystem":"(,4.3.32767]","runtime.win.System.Net.Primitives":"(,4.3.32767]","runtime.win.System.Net.Sockets":"(,4.3.32767]","runtime.win.System.Runtime.Extensions":"(,4.3.32767]","runtime.win10-arm-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win10-arm64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win10-x64-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win10-x86-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win7-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win7-x86.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win7.System.Private.Uri":"(,4.3.32767]","runtime.win8-arm.runtime.native.System.IO.Compression":"(,4.3.32767]","System.AppContext":"(,4.3.32767]","System.Buffers":"(,5.0.32767]","System.Collections":"(,4.3.32767]","System.Collections.Concurrent":"(,4.3.32767]","System.Collections.Immutable":"(,10.0.32767]","System.Collections.NonGeneric":"(,4.3.32767]","System.Collections.Specialized":"(,4.3.32767]","System.ComponentModel":"(,4.3.32767]","System.ComponentModel.Annotations":"(,4.3.32767]","System.ComponentModel.EventBasedAsync":"(,4.3.32767]","System.ComponentModel.Primitives":"(,4.3.32767]","System.ComponentModel.TypeConverter":"(,4.3.32767]","System.Console":"(,4.3.32767]","System.Data.Common":"(,4.3.32767]","System.Data.DataSetExtensions":"(,4.4.32767]","System.Diagnostics.Contracts":"(,4.3.32767]","System.Diagnostics.Debug":"(,4.3.32767]","System.Diagnostics.DiagnosticSource":"(,10.0.32767]","System.Diagnostics.FileVersionInfo":"(,4.3.32767]","System.Diagnostics.Process":"(,4.3.32767]","System.Diagnostics.StackTrace":"(,4.3.32767]","System.Diagnostics.TextWriterTraceListener":"(,4.3.32767]","System.Diagnostics.Tools":"(,4.3.32767]","System.Diagnostics.TraceSource":"(,4.3.32767]","System.Diagnostics.Tracing":"(,4.3.32767]","System.Drawing.Primitives":"(,4.3.32767]","System.Dynamic.Runtime":"(,4.3.32767]","System.Formats.Asn1":"(,10.0.32767]","System.Formats.Tar":"(,10.0.32767]","System.Globalization":"(,4.3.32767]","System.Globalization.Calendars":"(,4.3.32767]","System.Globalization.Extensions":"(,4.3.32767]","System.IO":"(,4.3.32767]","System.IO.Compression":"(,4.3.32767]","System.IO.Compression.ZipFile":"(,4.3.32767]","System.IO.FileSystem":"(,4.3.32767]","System.IO.FileSystem.AccessControl":"(,4.4.32767]","System.IO.FileSystem.DriveInfo":"(,4.3.32767]","System.IO.FileSystem.Primitives":"(,4.3.32767]","System.IO.FileSystem.Watcher":"(,4.3.32767]","System.IO.IsolatedStorage":"(,4.3.32767]","System.IO.MemoryMappedFiles":"(,4.3.32767]","System.IO.Pipelines":"(,10.0.32767]","System.IO.Pipes":"(,4.3.32767]","System.IO.Pipes.AccessControl":"(,5.0.32767]","System.IO.UnmanagedMemoryStream":"(,4.3.32767]","System.Linq":"(,4.3.32767]","System.Linq.AsyncEnumerable":"(,10.0.32767]","System.Linq.Expressions":"(,4.3.32767]","System.Linq.Parallel":"(,4.3.32767]","System.Linq.Queryable":"(,4.3.32767]","System.Memory":"(,5.0.32767]","System.Net.Http":"(,4.3.32767]","System.Net.Http.Json":"(,10.0.32767]","System.Net.NameResolution":"(,4.3.32767]","System.Net.NetworkInformation":"(,4.3.32767]","System.Net.Ping":"(,4.3.32767]","System.Net.Primitives":"(,4.3.32767]","System.Net.Requests":"(,4.3.32767]","System.Net.Security":"(,4.3.32767]","System.Net.ServerSentEvents":"(,10.0.32767]","System.Net.Sockets":"(,4.3.32767]","System.Net.WebHeaderCollection":"(,4.3.32767]","System.Net.WebSockets":"(,4.3.32767]","System.Net.WebSockets.Client":"(,4.3.32767]","System.Numerics.Vectors":"(,5.0.32767]","System.ObjectModel":"(,4.3.32767]","System.Private.DataContractSerialization":"(,4.3.32767]","System.Private.Uri":"(,4.3.32767]","System.Reflection":"(,4.3.32767]","System.Reflection.DispatchProxy":"(,6.0.32767]","System.Reflection.Emit":"(,4.7.32767]","System.Reflection.Emit.ILGeneration":"(,4.7.32767]","System.Reflection.Emit.Lightweight":"(,4.7.32767]","System.Reflection.Extensions":"(,4.3.32767]","System.Reflection.Metadata":"(,10.0.32767]","System.Reflection.Primitives":"(,4.3.32767]","System.Reflection.TypeExtensions":"(,4.3.32767]","System.Resources.Reader":"(,4.3.32767]","System.Resources.ResourceManager":"(,4.3.32767]","System.Resources.Writer":"(,4.3.32767]","System.Runtime":"(,4.3.32767]","System.Runtime.CompilerServices.Unsafe":"(,7.0.32767]","System.Runtime.CompilerServices.VisualC":"(,4.3.32767]","System.Runtime.Extensions":"(,4.3.32767]","System.Runtime.Handles":"(,4.3.32767]","System.Runtime.InteropServices":"(,4.3.32767]","System.Runtime.InteropServices.RuntimeInformation":"(,4.3.32767]","System.Runtime.Loader":"(,4.3.32767]","System.Runtime.Numerics":"(,4.3.32767]","System.Runtime.Serialization.Formatters":"(,4.3.32767]","System.Runtime.Serialization.Json":"(,4.3.32767]","System.Runtime.Serialization.Primitives":"(,4.3.32767]","System.Runtime.Serialization.Xml":"(,4.3.32767]","System.Security.AccessControl":"(,6.0.32767]","System.Security.Claims":"(,4.3.32767]","System.Security.Cryptography.Algorithms":"(,4.3.32767]","System.Security.Cryptography.Cng":"(,5.0.32767]","System.Security.Cryptography.Csp":"(,4.3.32767]","System.Security.Cryptography.Encoding":"(,4.3.32767]","System.Security.Cryptography.OpenSsl":"(,5.0.32767]","System.Security.Cryptography.Primitives":"(,4.3.32767]","System.Security.Cryptography.X509Certificates":"(,4.3.32767]","System.Security.Principal":"(,4.3.32767]","System.Security.Principal.Windows":"(,5.0.32767]","System.Security.SecureString":"(,4.3.32767]","System.Text.Encoding":"(,4.3.32767]","System.Text.Encoding.CodePages":"(,10.0.32767]","System.Text.Encoding.Extensions":"(,4.3.32767]","System.Text.Encodings.Web":"(,10.0.32767]","System.Text.Json":"(,10.0.32767]","System.Text.RegularExpressions":"(,4.3.32767]","System.Threading":"(,4.3.32767]","System.Threading.AccessControl":"(,10.0.32767]","System.Threading.Channels":"(,10.0.32767]","System.Threading.Overlapped":"(,4.3.32767]","System.Threading.Tasks":"(,4.3.32767]","System.Threading.Tasks.Dataflow":"(,10.0.32767]","System.Threading.Tasks.Extensions":"(,5.0.32767]","System.Threading.Tasks.Parallel":"(,4.3.32767]","System.Threading.Thread":"(,4.3.32767]","System.Threading.ThreadPool":"(,4.3.32767]","System.Threading.Timer":"(,4.3.32767]","System.ValueTuple":"(,4.5.32767]","System.Xml.ReaderWriter":"(,4.3.32767]","System.Xml.XDocument":"(,4.3.32767]","System.Xml.XmlDocument":"(,4.3.32767]","System.Xml.XmlSerializer":"(,4.3.32767]","System.Xml.XPath":"(,4.3.32767]","System.Xml.XPath.XDocument":"(,5.0.32767]"}}} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Application/obj/rider.project.model.nuget.info b/BookieApi/src/Bookie.Application/obj/rider.project.model.nuget.info new file mode 100644 index 0000000..a57074f --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/rider.project.model.nuget.info @@ -0,0 +1 @@ +17891904138490874 \ No newline at end of file diff --git a/BookieApi/src/Bookie.Application/obj/rider.project.restore.info b/BookieApi/src/Bookie.Application/obj/rider.project.restore.info new file mode 100644 index 0000000..a57074f --- /dev/null +++ b/BookieApi/src/Bookie.Application/obj/rider.project.restore.info @@ -0,0 +1 @@ +17891904138490874 \ No newline at end of file diff --git a/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj b/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj new file mode 100644 index 0000000..b760144 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj @@ -0,0 +1,9 @@ + + + + net10.0 + enable + enable + + + diff --git a/BookieApi/src/Bookie.Domain/Entities/League.cs b/BookieApi/src/Bookie.Domain/Entities/League.cs new file mode 100644 index 0000000..067bd1d --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/League.cs @@ -0,0 +1,19 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.league — a competition (league or cup) in a given country. +/// +public class League +{ + public int LeagueId { get; set; } + public string Name { get; set; } = null!; + public string Country { get; set; } = null!; + public short TierLevel { get; set; } = 1; + + /// 'league' or 'cup'. + public string CompetitionType { get; set; } = "league"; + + public string? Source { get; set; } + + public ICollection Seasons { get; set; } = new List(); +} diff --git a/BookieApi/src/Bookie.Domain/Entities/LeagueModelParam.cs b/BookieApi/src/Bookie.Domain/Entities/LeagueModelParam.cs new file mode 100644 index 0000000..58601d2 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/LeagueModelParam.cs @@ -0,0 +1,16 @@ +namespace Bookie.Domain.Entities; + +/// bookie.league_model_param — Dixon-Coles parameters trained per league. +public class LeagueModelParam +{ + public int LeagueId { get; set; } + public decimal HomeAdvantage { get; set; } + public decimal Rho { get; set; } + public decimal? AvgHomeGoals { get; set; } + public decimal? AvgAwayGoals { get; set; } + public int MatchesUsed { get; set; } + public int? HalfLifeDays { get; set; } + public DateTime TrainedAt { get; set; } + + public League League { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/Match.cs b/BookieApi/src/Bookie.Domain/Entities/Match.cs new file mode 100644 index 0000000..eef25f5 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/Match.cs @@ -0,0 +1,34 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.match — a single fixture between two teams. +/// +public class Match +{ + public int MatchId { get; set; } + public int MatchdayId { get; set; } + public int HomeTeamId { get; set; } + public int AwayTeamId { get; set; } + public DateTime KickoffAt { get; set; } + public string? Stadium { get; set; } + public string? Referee { get; set; } + + /// scheduled / live / finished / cancelled. + public string Status { get; set; } = "scheduled"; + + public short? HomeScoreHt { get; set; } + public short? AwayScoreHt { get; set; } + public short? HomeScoreFt { get; set; } + public short? AwayScoreFt { get; set; } + public string? DataSource { get; set; } + public DateTime? UpdatedAt { get; set; } + + public Matchday Matchday { get; set; } = null!; + public Team HomeTeam { get; set; } = null!; + public Team AwayTeam { get; set; } = null!; + + public ICollection TeamStats { get; set; } = new List(); + public ICollection Goals { get; set; } = new List(); + public ICollection Cards { get; set; } = new List(); + public ICollection Penalties { get; set; } = new List(); +} diff --git a/BookieApi/src/Bookie.Domain/Entities/MatchCard.cs b/BookieApi/src/Bookie.Domain/Entities/MatchCard.cs new file mode 100644 index 0000000..e6a20bb --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/MatchCard.cs @@ -0,0 +1,22 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.match_card — a yellow/red card shown in a match. +/// +public class MatchCard +{ + public int CardId { get; set; } + public int MatchId { get; set; } + public int TeamId { get; set; } + public int PlayerId { get; set; } + public short Minute { get; set; } + + /// yellow / red. + public string CardType { get; set; } = null!; + + public string? Reason { get; set; } + + public Match Match { get; set; } = null!; + public Team Team { get; set; } = null!; + public Player Player { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/MatchExtraOdds.cs b/BookieApi/src/Bookie.Domain/Entities/MatchExtraOdds.cs new file mode 100644 index 0000000..d38fab0 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/MatchExtraOdds.cs @@ -0,0 +1,16 @@ +namespace Bookie.Domain.Entities; + +/// bookie.match_extra_odds — over/under corners or cards markets. +public class MatchExtraOdds +{ + public int MatchExtraOddsId { get; set; } + public int MatchId { get; set; } + public string Market { get; set; } = ""; + public string Bookmaker { get; set; } = ""; + public decimal Line { get; set; } + public decimal OverOdds { get; set; } + public decimal UnderOdds { get; set; } + public DateTime FetchedAt { get; set; } + + public Match Match { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/MatchGoal.cs b/BookieApi/src/Bookie.Domain/Entities/MatchGoal.cs new file mode 100644 index 0000000..2f7536b --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/MatchGoal.cs @@ -0,0 +1,23 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.match_goal — a goal scored in a match. +/// +public class MatchGoal +{ + public int GoalId { get; set; } + public int MatchId { get; set; } + public int TeamId { get; set; } + public int PlayerId { get; set; } + public int? AssistPlayerId { get; set; } + public short Minute { get; set; } + public short AddedTime { get; set; } + + /// open_play / penalty / own_goal. + public string GoalType { get; set; } = "open_play"; + + public Match Match { get; set; } = null!; + public Team Team { get; set; } = null!; + public Player Player { get; set; } = null!; + public Player? AssistPlayer { get; set; } +} diff --git a/BookieApi/src/Bookie.Domain/Entities/MatchOdds.cs b/BookieApi/src/Bookie.Domain/Entities/MatchOdds.cs new file mode 100644 index 0000000..8585c91 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/MatchOdds.cs @@ -0,0 +1,18 @@ +namespace Bookie.Domain.Entities; + +/// bookie.match_odds — 1X2 odds from one bookmaker for a match. +public class MatchOdds +{ + public int MatchOddsId { get; set; } + public int MatchId { get; set; } + public string Bookmaker { get; set; } = ""; + public decimal HomeOdds { get; set; } + public decimal DrawOdds { get; set; } + public decimal AwayOdds { get; set; } + public decimal? TotalLine { get; set; } + public decimal? OverOdds { get; set; } + public decimal? UnderOdds { get; set; } + public DateTime FetchedAt { get; set; } + + public Match Match { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/MatchPenalty.cs b/BookieApi/src/Bookie.Domain/Entities/MatchPenalty.cs new file mode 100644 index 0000000..de32a1e --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/MatchPenalty.cs @@ -0,0 +1,22 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.match_penalty — a penalty awarded in a match. +/// +public class MatchPenalty +{ + public int PenaltyId { get; set; } + public int MatchId { get; set; } + public int TeamId { get; set; } + public int? PlayerId { get; set; } + public short? Minute { get; set; } + + /// scored / missed / saved. + public string Result { get; set; } = null!; + + public string? Reason { get; set; } + + public Match Match { get; set; } = null!; + public Team Team { get; set; } = null!; + public Player? Player { get; set; } +} diff --git a/BookieApi/src/Bookie.Domain/Entities/MatchPrediction.cs b/BookieApi/src/Bookie.Domain/Entities/MatchPrediction.cs new file mode 100644 index 0000000..64709c0 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/MatchPrediction.cs @@ -0,0 +1,26 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.match_prediction — a model-generated statistical prediction for one team in a match. +/// One row per (match, team). +/// +public class MatchPrediction +{ + public int PredictionId { get; set; } + public int MatchId { get; set; } + public int TeamId { get; set; } + + public decimal? PredictedGoals { get; set; } + public decimal? PredictedShotsTotal { get; set; } + public decimal? PredictedShotsOnTarget { get; set; } + public decimal? PredictedCorners { get; set; } + public decimal? PredictedFouls { get; set; } + public decimal? PredictedYellowCards { get; set; } + + public DateTime ModelTrainedAt { get; set; } + public int? HalfLifeDays { get; set; } + public DateTime PredictedAt { get; set; } + + public Match Match { get; set; } = null!; + public Team Team { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/MatchPredictionOpenAi.cs b/BookieApi/src/Bookie.Domain/Entities/MatchPredictionOpenAi.cs new file mode 100644 index 0000000..301d85d --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/MatchPredictionOpenAi.cs @@ -0,0 +1,44 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.match_prediction_openai — a projection produced by the OpenAI predictor for one team +/// in a match. A new row is written every time the prediction function is executed (history is kept). +/// +public class MatchPredictionOpenAi +{ + public int PredictionId { get; set; } + public int MatchId { get; set; } + public int TeamId { get; set; } + + public decimal? PredictedGoals { get; set; } + public decimal? GoalsLow { get; set; } + public decimal? GoalsHigh { get; set; } + + public decimal? PredictedShotsOnTarget { get; set; } + public decimal? ShotsOnTargetLow { get; set; } + public decimal? ShotsOnTargetHigh { get; set; } + + public decimal? PredictedCorners { get; set; } + public decimal? CornersLow { get; set; } + public decimal? CornersHigh { get; set; } + + public decimal? PredictedFouls { get; set; } + public decimal? FoulsLow { get; set; } + public decimal? FoulsHigh { get; set; } + + public decimal? PredictedYellowCards { get; set; } + public decimal? YellowCardsLow { get; set; } + public decimal? YellowCardsHigh { get; set; } + + public decimal? PredictedRedCards { get; set; } + public decimal? RedCardsLow { get; set; } + public decimal? RedCardsHigh { get; set; } + + public string? Confidence { get; set; } + public string? Reasoning { get; set; } + public string? Model { get; set; } + public DateTime PredictedAt { get; set; } + + public Match Match { get; set; } = null!; + public Team Team { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/MatchTeamStats.cs b/BookieApi/src/Bookie.Domain/Entities/MatchTeamStats.cs new file mode 100644 index 0000000..9496503 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/MatchTeamStats.cs @@ -0,0 +1,22 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.match_team_stats — per-team stats for a single match (one row per team). +/// +public class MatchTeamStats +{ + public int MatchTeamStatsId { get; set; } + public int MatchId { get; set; } + public int TeamId { get; set; } + public decimal? PossessionPct { get; set; } + public short? ShotsTotal { get; set; } + public short? ShotsOnTarget { get; set; } + public short? Corners { get; set; } + public short? Fouls { get; set; } + public short? Offsides { get; set; } + public short YellowCards { get; set; } + public short RedCards { get; set; } + + public Match Match { get; set; } = null!; + public Team Team { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/Matchday.cs b/BookieApi/src/Bookie.Domain/Entities/Matchday.cs new file mode 100644 index 0000000..6cf5b9b --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/Matchday.cs @@ -0,0 +1,16 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.matchday — a round within a season. +/// +public class Matchday +{ + public int MatchdayId { get; set; } + public int SeasonId { get; set; } + public short Number { get; set; } + public DateOnly? DateFrom { get; set; } + public DateOnly? DateTo { get; set; } + + public Season Season { get; set; } = null!; + public ICollection Matches { get; set; } = new List(); +} diff --git a/BookieApi/src/Bookie.Domain/Entities/Player.cs b/BookieApi/src/Bookie.Domain/Entities/Player.cs new file mode 100644 index 0000000..b1147e0 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/Player.cs @@ -0,0 +1,17 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.player — a football player. +/// +public class Player +{ + public int PlayerId { get; set; } + public string FullName { get; set; } = null!; + public DateOnly? BirthDate { get; set; } + public string? Nationality { get; set; } + + /// GK / DF / MF / FW. + public string? PrimaryPosition { get; set; } + + public ICollection Contracts { get; set; } = new List(); +} diff --git a/BookieApi/src/Bookie.Domain/Entities/PlayerContract.cs b/BookieApi/src/Bookie.Domain/Entities/PlayerContract.cs new file mode 100644 index 0000000..7708d47 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/PlayerContract.cs @@ -0,0 +1,17 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.player_contract — a player's spell at a team (end_date NULL = current). +/// +public class PlayerContract +{ + public int ContractId { get; set; } + public int PlayerId { get; set; } + public int TeamId { get; set; } + public short? ShirtNumber { get; set; } + public DateOnly StartDate { get; set; } + public DateOnly? EndDate { get; set; } + + public Player Player { get; set; } = null!; + public Team Team { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/Season.cs b/BookieApi/src/Bookie.Domain/Entities/Season.cs new file mode 100644 index 0000000..87de0f1 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/Season.cs @@ -0,0 +1,17 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.season — a single edition of a league, e.g. "2026/2027". +/// +public class Season +{ + public int SeasonId { get; set; } + public int LeagueId { get; set; } + public string Name { get; set; } = null!; + public DateOnly StartDate { get; set; } + public DateOnly? EndDate { get; set; } + + public League League { get; set; } = null!; + public ICollection Matchdays { get; set; } = new List(); + public ICollection TeamSeasons { get; set; } = new List(); +} diff --git a/BookieApi/src/Bookie.Domain/Entities/Team.cs b/BookieApi/src/Bookie.Domain/Entities/Team.cs new file mode 100644 index 0000000..2e1d58a --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/Team.cs @@ -0,0 +1,17 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.team — a football club. +/// +public class Team +{ + public int TeamId { get; set; } + public string Name { get; set; } = null!; + public string? ShortName { get; set; } + public string? City { get; set; } + public string? Stadium { get; set; } + public DateOnly? FoundedDate { get; set; } + + public ICollection TeamSeasons { get; set; } = new List(); + public ICollection PlayerContracts { get; set; } = new List(); +} diff --git a/BookieApi/src/Bookie.Domain/Entities/TeamOddsAlias.cs b/BookieApi/src/Bookie.Domain/Entities/TeamOddsAlias.cs new file mode 100644 index 0000000..61e1167 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/TeamOddsAlias.cs @@ -0,0 +1,10 @@ +namespace Bookie.Domain.Entities; + +/// bookie.team_odds_alias — maps Odds API team names to internal team_id. +public class TeamOddsAlias +{ + public int TeamId { get; set; } + public string OddsApiName { get; set; } = ""; + + public Team Team { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/TeamSeason.cs b/BookieApi/src/Bookie.Domain/Entities/TeamSeason.cs new file mode 100644 index 0000000..ec0e27b --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/TeamSeason.cs @@ -0,0 +1,14 @@ +namespace Bookie.Domain.Entities; + +/// +/// bookie.team_season — links a team to a season it competes in. +/// +public class TeamSeason +{ + public int TeamSeasonId { get; set; } + public int TeamId { get; set; } + public int SeasonId { get; set; } + + public Team Team { get; set; } = null!; + public Season Season { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/Entities/TeamStrength.cs b/BookieApi/src/Bookie.Domain/Entities/TeamStrength.cs new file mode 100644 index 0000000..9cf32fd --- /dev/null +++ b/BookieApi/src/Bookie.Domain/Entities/TeamStrength.cs @@ -0,0 +1,16 @@ +namespace Bookie.Domain.Entities; + +/// bookie.team_strength — attack/defense ratings per team per league. +public class TeamStrength +{ + public int TeamStrengthId { get; set; } + public int TeamId { get; set; } + public int LeagueId { get; set; } + public decimal LogAttack { get; set; } + public decimal LogDefense { get; set; } + public int MatchesUsed { get; set; } + public DateTime TrainedAt { get; set; } + + public Team Team { get; set; } = null!; + public League League { get; set; } = null!; +} diff --git a/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.deps.json b/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.deps.json new file mode 100644 index 0000000..0a1b8fd --- /dev/null +++ b/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v10.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v10.0": { + "Bookie.Domain/1.0.0": { + "runtime": { + "Bookie.Domain.dll": {} + } + } + } + }, + "libraries": { + "Bookie.Domain/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.dll b/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.dll new file mode 100644 index 0000000..0a94d58 Binary files /dev/null and b/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.dll differ diff --git a/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.pdb b/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.pdb new file mode 100644 index 0000000..85e64d9 Binary files /dev/null and b/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.pdb differ diff --git a/BookieApi/src/Bookie.Domain/obj/Bookie.Domain.csproj.nuget.dgspec.json b/BookieApi/src/Bookie.Domain/obj/Bookie.Domain.csproj.nuget.dgspec.json new file mode 100644 index 0000000..8e05d10 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Bookie.Domain.csproj.nuget.dgspec.json @@ -0,0 +1,342 @@ +{ + "format": 1, + "restore": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": {} + }, + "projects": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "projectName": "Bookie.Domain", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Domain/obj/Bookie.Domain.csproj.nuget.g.props b/BookieApi/src/Bookie.Domain/obj/Bookie.Domain.csproj.nuget.g.props new file mode 100644 index 0000000..3de9b3e --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Bookie.Domain.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /Users/piotrkus/.nuget/packages/ + /Users/piotrkus/.nuget/packages/ + PackageReference + 7.0.0 + + + + + \ No newline at end of file diff --git a/BookieApi/src/Bookie.Domain/obj/Bookie.Domain.csproj.nuget.g.targets b/BookieApi/src/Bookie.Domain/obj/Bookie.Domain.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Bookie.Domain.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs new file mode 100644 index 0000000..925b135 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")] diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.AssemblyInfo.cs b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.AssemblyInfo.cs new file mode 100644 index 0000000..12f7ea5 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Bookie.Domain")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Bookie.Domain")] +[assembly: System.Reflection.AssemblyTitleAttribute("Bookie.Domain")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Wygenerowane przez klasę WriteCodeFragment programu MSBuild. + diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.AssemblyInfoInputs.cache b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.AssemblyInfoInputs.cache new file mode 100644 index 0000000..073ec85 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +c7198f7a413150ce0a1bd3aa854fd27f36509ae8275801b78707d9cee95ac7a0 diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.GeneratedMSBuildEditorConfig.editorconfig b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..1f8ee99 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,17 @@ +is_global = true +build_property.TargetFramework = net10.0 +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v10.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Bookie.Domain +build_property.ProjectDir = /Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 10.0 +build_property.EnableCodeStyleSeverity = diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.GlobalUsings.g.cs b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.GlobalUsings.g.cs new file mode 100644 index 0000000..d12bcbc --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.assets.cache b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.assets.cache new file mode 100644 index 0000000..c855d42 Binary files /dev/null and b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.assets.cache differ diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.csproj.CoreCompileInputs.cache b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..6f40aa7 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +f6e29168c48f1f7107a001103e3cb33eddf107736674a3162991651ea91f8ba8 diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.csproj.FileListAbsolute.txt b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..657192e --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.deps.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/bin/Debug/net10.0/Bookie.Domain.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.GeneratedMSBuildEditorConfig.editorconfig +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.AssemblyInfoInputs.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.AssemblyInfo.cs +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.csproj.CoreCompileInputs.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/refint/Bookie.Domain.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/ref/Bookie.Domain.dll diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.dll b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.dll new file mode 100644 index 0000000..0a94d58 Binary files /dev/null and b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.dll differ diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.pdb b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.pdb new file mode 100644 index 0000000..85e64d9 Binary files /dev/null and b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/Bookie.Domain.pdb differ diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/ref/Bookie.Domain.dll b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/ref/Bookie.Domain.dll new file mode 100644 index 0000000..a2cef2a Binary files /dev/null and b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/ref/Bookie.Domain.dll differ diff --git a/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/refint/Bookie.Domain.dll b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/refint/Bookie.Domain.dll new file mode 100644 index 0000000..a2cef2a Binary files /dev/null and b/BookieApi/src/Bookie.Domain/obj/Debug/net10.0/refint/Bookie.Domain.dll differ diff --git a/BookieApi/src/Bookie.Domain/obj/project.assets.json b/BookieApi/src/Bookie.Domain/obj/project.assets.json new file mode 100644 index 0000000..1b2a538 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/project.assets.json @@ -0,0 +1,347 @@ +{ + "version": 3, + "targets": { + "net10.0": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + "net10.0": [] + }, + "packageFolders": { + "/Users/piotrkus/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "projectName": "Bookie.Domain", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Domain/obj/project.nuget.cache b/BookieApi/src/Bookie.Domain/obj/project.nuget.cache new file mode 100644 index 0000000..9081307 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/project.nuget.cache @@ -0,0 +1,8 @@ +{ + "version": 2, + "dgSpecHash": "YydnWMTwrdw=", + "success": true, + "projectFilePath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "expectedPackageFiles": [], + "logs": [] +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Domain/obj/project.packagespec.json b/BookieApi/src/Bookie.Domain/obj/project.packagespec.json new file mode 100644 index 0000000..06ec2de --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/project.packagespec.json @@ -0,0 +1 @@ +"restore":{"projectUniqueName":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj","projectName":"Bookie.Domain","projectPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj","packagesPath":"","outputPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net10.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net10.0":{"targetAlias":"net10.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"all"},"SdkAnalysisLevel":"10.0.200"}"frameworks":{"net10.0":{"targetAlias":"net10.0","imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json","packagesToPrune":{"Microsoft.CSharp":"(,4.7.32767]","Microsoft.VisualBasic":"(,10.4.32767]","Microsoft.Win32.Primitives":"(,4.3.32767]","Microsoft.Win32.Registry":"(,5.0.32767]","runtime.any.System.Collections":"(,4.3.32767]","runtime.any.System.Diagnostics.Tools":"(,4.3.32767]","runtime.any.System.Diagnostics.Tracing":"(,4.3.32767]","runtime.any.System.Globalization":"(,4.3.32767]","runtime.any.System.Globalization.Calendars":"(,4.3.32767]","runtime.any.System.IO":"(,4.3.32767]","runtime.any.System.Reflection":"(,4.3.32767]","runtime.any.System.Reflection.Extensions":"(,4.3.32767]","runtime.any.System.Reflection.Primitives":"(,4.3.32767]","runtime.any.System.Resources.ResourceManager":"(,4.3.32767]","runtime.any.System.Runtime":"(,4.3.32767]","runtime.any.System.Runtime.Handles":"(,4.3.32767]","runtime.any.System.Runtime.InteropServices":"(,4.3.32767]","runtime.any.System.Text.Encoding":"(,4.3.32767]","runtime.any.System.Text.Encoding.Extensions":"(,4.3.32767]","runtime.any.System.Threading.Tasks":"(,4.3.32767]","runtime.any.System.Threading.Timer":"(,4.3.32767]","runtime.aot.System.Collections":"(,4.3.32767]","runtime.aot.System.Diagnostics.Tools":"(,4.3.32767]","runtime.aot.System.Diagnostics.Tracing":"(,4.3.32767]","runtime.aot.System.Globalization":"(,4.3.32767]","runtime.aot.System.Globalization.Calendars":"(,4.3.32767]","runtime.aot.System.IO":"(,4.3.32767]","runtime.aot.System.Reflection":"(,4.3.32767]","runtime.aot.System.Reflection.Extensions":"(,4.3.32767]","runtime.aot.System.Reflection.Primitives":"(,4.3.32767]","runtime.aot.System.Resources.ResourceManager":"(,4.3.32767]","runtime.aot.System.Runtime":"(,4.3.32767]","runtime.aot.System.Runtime.Handles":"(,4.3.32767]","runtime.aot.System.Runtime.InteropServices":"(,4.3.32767]","runtime.aot.System.Text.Encoding":"(,4.3.32767]","runtime.aot.System.Text.Encoding.Extensions":"(,4.3.32767]","runtime.aot.System.Threading.Tasks":"(,4.3.32767]","runtime.aot.System.Threading.Timer":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.unix.Microsoft.Win32.Primitives":"(,4.3.32767]","runtime.unix.System.Console":"(,4.3.32767]","runtime.unix.System.Diagnostics.Debug":"(,4.3.32767]","runtime.unix.System.IO.FileSystem":"(,4.3.32767]","runtime.unix.System.Net.Primitives":"(,4.3.32767]","runtime.unix.System.Net.Sockets":"(,4.3.32767]","runtime.unix.System.Private.Uri":"(,4.3.32767]","runtime.unix.System.Runtime.Extensions":"(,4.3.32767]","runtime.win.Microsoft.Win32.Primitives":"(,4.3.32767]","runtime.win.System.Console":"(,4.3.32767]","runtime.win.System.Diagnostics.Debug":"(,4.3.32767]","runtime.win.System.IO.FileSystem":"(,4.3.32767]","runtime.win.System.Net.Primitives":"(,4.3.32767]","runtime.win.System.Net.Sockets":"(,4.3.32767]","runtime.win.System.Runtime.Extensions":"(,4.3.32767]","runtime.win10-arm-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win10-arm64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win10-x64-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win10-x86-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win7-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win7-x86.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win7.System.Private.Uri":"(,4.3.32767]","runtime.win8-arm.runtime.native.System.IO.Compression":"(,4.3.32767]","System.AppContext":"(,4.3.32767]","System.Buffers":"(,5.0.32767]","System.Collections":"(,4.3.32767]","System.Collections.Concurrent":"(,4.3.32767]","System.Collections.Immutable":"(,10.0.32767]","System.Collections.NonGeneric":"(,4.3.32767]","System.Collections.Specialized":"(,4.3.32767]","System.ComponentModel":"(,4.3.32767]","System.ComponentModel.Annotations":"(,4.3.32767]","System.ComponentModel.EventBasedAsync":"(,4.3.32767]","System.ComponentModel.Primitives":"(,4.3.32767]","System.ComponentModel.TypeConverter":"(,4.3.32767]","System.Console":"(,4.3.32767]","System.Data.Common":"(,4.3.32767]","System.Data.DataSetExtensions":"(,4.4.32767]","System.Diagnostics.Contracts":"(,4.3.32767]","System.Diagnostics.Debug":"(,4.3.32767]","System.Diagnostics.DiagnosticSource":"(,10.0.32767]","System.Diagnostics.FileVersionInfo":"(,4.3.32767]","System.Diagnostics.Process":"(,4.3.32767]","System.Diagnostics.StackTrace":"(,4.3.32767]","System.Diagnostics.TextWriterTraceListener":"(,4.3.32767]","System.Diagnostics.Tools":"(,4.3.32767]","System.Diagnostics.TraceSource":"(,4.3.32767]","System.Diagnostics.Tracing":"(,4.3.32767]","System.Drawing.Primitives":"(,4.3.32767]","System.Dynamic.Runtime":"(,4.3.32767]","System.Formats.Asn1":"(,10.0.32767]","System.Formats.Tar":"(,10.0.32767]","System.Globalization":"(,4.3.32767]","System.Globalization.Calendars":"(,4.3.32767]","System.Globalization.Extensions":"(,4.3.32767]","System.IO":"(,4.3.32767]","System.IO.Compression":"(,4.3.32767]","System.IO.Compression.ZipFile":"(,4.3.32767]","System.IO.FileSystem":"(,4.3.32767]","System.IO.FileSystem.AccessControl":"(,4.4.32767]","System.IO.FileSystem.DriveInfo":"(,4.3.32767]","System.IO.FileSystem.Primitives":"(,4.3.32767]","System.IO.FileSystem.Watcher":"(,4.3.32767]","System.IO.IsolatedStorage":"(,4.3.32767]","System.IO.MemoryMappedFiles":"(,4.3.32767]","System.IO.Pipelines":"(,10.0.32767]","System.IO.Pipes":"(,4.3.32767]","System.IO.Pipes.AccessControl":"(,5.0.32767]","System.IO.UnmanagedMemoryStream":"(,4.3.32767]","System.Linq":"(,4.3.32767]","System.Linq.AsyncEnumerable":"(,10.0.32767]","System.Linq.Expressions":"(,4.3.32767]","System.Linq.Parallel":"(,4.3.32767]","System.Linq.Queryable":"(,4.3.32767]","System.Memory":"(,5.0.32767]","System.Net.Http":"(,4.3.32767]","System.Net.Http.Json":"(,10.0.32767]","System.Net.NameResolution":"(,4.3.32767]","System.Net.NetworkInformation":"(,4.3.32767]","System.Net.Ping":"(,4.3.32767]","System.Net.Primitives":"(,4.3.32767]","System.Net.Requests":"(,4.3.32767]","System.Net.Security":"(,4.3.32767]","System.Net.ServerSentEvents":"(,10.0.32767]","System.Net.Sockets":"(,4.3.32767]","System.Net.WebHeaderCollection":"(,4.3.32767]","System.Net.WebSockets":"(,4.3.32767]","System.Net.WebSockets.Client":"(,4.3.32767]","System.Numerics.Vectors":"(,5.0.32767]","System.ObjectModel":"(,4.3.32767]","System.Private.DataContractSerialization":"(,4.3.32767]","System.Private.Uri":"(,4.3.32767]","System.Reflection":"(,4.3.32767]","System.Reflection.DispatchProxy":"(,6.0.32767]","System.Reflection.Emit":"(,4.7.32767]","System.Reflection.Emit.ILGeneration":"(,4.7.32767]","System.Reflection.Emit.Lightweight":"(,4.7.32767]","System.Reflection.Extensions":"(,4.3.32767]","System.Reflection.Metadata":"(,10.0.32767]","System.Reflection.Primitives":"(,4.3.32767]","System.Reflection.TypeExtensions":"(,4.3.32767]","System.Resources.Reader":"(,4.3.32767]","System.Resources.ResourceManager":"(,4.3.32767]","System.Resources.Writer":"(,4.3.32767]","System.Runtime":"(,4.3.32767]","System.Runtime.CompilerServices.Unsafe":"(,7.0.32767]","System.Runtime.CompilerServices.VisualC":"(,4.3.32767]","System.Runtime.Extensions":"(,4.3.32767]","System.Runtime.Handles":"(,4.3.32767]","System.Runtime.InteropServices":"(,4.3.32767]","System.Runtime.InteropServices.RuntimeInformation":"(,4.3.32767]","System.Runtime.Loader":"(,4.3.32767]","System.Runtime.Numerics":"(,4.3.32767]","System.Runtime.Serialization.Formatters":"(,4.3.32767]","System.Runtime.Serialization.Json":"(,4.3.32767]","System.Runtime.Serialization.Primitives":"(,4.3.32767]","System.Runtime.Serialization.Xml":"(,4.3.32767]","System.Security.AccessControl":"(,6.0.32767]","System.Security.Claims":"(,4.3.32767]","System.Security.Cryptography.Algorithms":"(,4.3.32767]","System.Security.Cryptography.Cng":"(,5.0.32767]","System.Security.Cryptography.Csp":"(,4.3.32767]","System.Security.Cryptography.Encoding":"(,4.3.32767]","System.Security.Cryptography.OpenSsl":"(,5.0.32767]","System.Security.Cryptography.Primitives":"(,4.3.32767]","System.Security.Cryptography.X509Certificates":"(,4.3.32767]","System.Security.Principal":"(,4.3.32767]","System.Security.Principal.Windows":"(,5.0.32767]","System.Security.SecureString":"(,4.3.32767]","System.Text.Encoding":"(,4.3.32767]","System.Text.Encoding.CodePages":"(,10.0.32767]","System.Text.Encoding.Extensions":"(,4.3.32767]","System.Text.Encodings.Web":"(,10.0.32767]","System.Text.Json":"(,10.0.32767]","System.Text.RegularExpressions":"(,4.3.32767]","System.Threading":"(,4.3.32767]","System.Threading.AccessControl":"(,10.0.32767]","System.Threading.Channels":"(,10.0.32767]","System.Threading.Overlapped":"(,4.3.32767]","System.Threading.Tasks":"(,4.3.32767]","System.Threading.Tasks.Dataflow":"(,10.0.32767]","System.Threading.Tasks.Extensions":"(,5.0.32767]","System.Threading.Tasks.Parallel":"(,4.3.32767]","System.Threading.Thread":"(,4.3.32767]","System.Threading.ThreadPool":"(,4.3.32767]","System.Threading.Timer":"(,4.3.32767]","System.ValueTuple":"(,4.5.32767]","System.Xml.ReaderWriter":"(,4.3.32767]","System.Xml.XDocument":"(,4.3.32767]","System.Xml.XmlDocument":"(,4.3.32767]","System.Xml.XmlSerializer":"(,4.3.32767]","System.Xml.XPath":"(,4.3.32767]","System.Xml.XPath.XDocument":"(,5.0.32767]"}}} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Domain/obj/rider.project.model.nuget.info b/BookieApi/src/Bookie.Domain/obj/rider.project.model.nuget.info new file mode 100644 index 0000000..2c4ade8 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/rider.project.model.nuget.info @@ -0,0 +1 @@ +17891904138121909 \ No newline at end of file diff --git a/BookieApi/src/Bookie.Domain/obj/rider.project.restore.info b/BookieApi/src/Bookie.Domain/obj/rider.project.restore.info new file mode 100644 index 0000000..2c4ade8 --- /dev/null +++ b/BookieApi/src/Bookie.Domain/obj/rider.project.restore.info @@ -0,0 +1 @@ +17891904138121909 \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/Auth/AuthService.cs b/BookieApi/src/Bookie.Infrastructure/Auth/AuthService.cs new file mode 100644 index 0000000..c256484 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Auth/AuthService.cs @@ -0,0 +1,62 @@ +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; +using System.Text; +using Bookie.Application.DTOs.Auth; +using Bookie.Application.Interfaces; +using Microsoft.Extensions.Options; +using Microsoft.IdentityModel.Tokens; + +namespace Bookie.Infrastructure.Auth; + +/// +/// Simple JWT auth against an in-memory user list (admin/user roles). The bookie schema has +/// no users table, so demo credentials are configured in appsettings ("AuthUsers"). +/// +public class AuthService : IAuthService +{ + private readonly JwtOptions _jwt; + private readonly IReadOnlyList _users; + + public AuthService(IOptions jwt, IOptions users) + { + _jwt = jwt.Value; + _users = users.Value.Users; + } + + public AuthResponseDto? Login(LoginRequestDto request) + { + var user = _users.FirstOrDefault(u => + string.Equals(u.Username, request.Username, StringComparison.OrdinalIgnoreCase) + && u.Password == request.Password); + + if (user is null) + return null; + + var expires = DateTime.UtcNow.AddMinutes(_jwt.ExpiryMinutes); + var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwt.Secret)); + var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); + + var claims = new[] + { + new Claim(JwtRegisteredClaimNames.Sub, user.Username), + new Claim(ClaimTypes.Name, user.Username), + new Claim(ClaimTypes.Role, user.Role), + new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) + }; + + var token = new JwtSecurityToken( + issuer: _jwt.Issuer, + audience: _jwt.Audience, + claims: claims, + expires: expires, + signingCredentials: creds); + + return new AuthResponseDto + { + Token = new JwtSecurityTokenHandler().WriteToken(token), + Username = user.Username, + Role = user.Role, + ExpiresAt = expires + }; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Auth/JwtOptions.cs b/BookieApi/src/Bookie.Infrastructure/Auth/JwtOptions.cs new file mode 100644 index 0000000..7c4377b --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Auth/JwtOptions.cs @@ -0,0 +1,26 @@ +namespace Bookie.Infrastructure.Auth; + +/// Bound from the "Jwt" configuration section. +public class JwtOptions +{ + public const string SectionName = "Jwt"; + + public string Issuer { get; set; } = "BookieApi"; + public string Audience { get; set; } = "BookieClient"; + public string Secret { get; set; } = ""; + public int ExpiryMinutes { get; set; } = 480; +} + +/// A seeded demo user (in-memory; the bookie schema has no users table). +public class DemoUser +{ + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; + public string Role { get; set; } = "user"; +} + +public class AuthSeedOptions +{ + public const string SectionName = "AuthUsers"; + public List Users { get; set; } = new(); +} diff --git a/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj b/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj new file mode 100644 index 0000000..21d8501 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj @@ -0,0 +1,26 @@ + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + net10.0 + enable + enable + + + diff --git a/BookieApi/src/Bookie.Infrastructure/DependencyInjection.cs b/BookieApi/src/Bookie.Infrastructure/DependencyInjection.cs new file mode 100644 index 0000000..2d88196 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/DependencyInjection.cs @@ -0,0 +1,46 @@ +using Bookie.Application.Interfaces; +using Bookie.Infrastructure.Auth; +using Bookie.Infrastructure.Persistence; +using Bookie.Infrastructure.Predictions; +using Bookie.Infrastructure.Services; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Bookie.Infrastructure; + +public static class DependencyInjection +{ + public static IServiceCollection AddBookieInfrastructure( + this IServiceCollection services, IConfiguration configuration) + { + var connectionString = configuration.GetConnectionString("BookieDb") + ?? throw new InvalidOperationException("Connection string 'BookieDb' is not configured."); + + services.AddDbContext(options => + options.UseNpgsql(connectionString, npgsql => + npgsql.MigrationsHistoryTable("__ef_migrations_history", "bookie"))); + + services.Configure(configuration.GetSection(JwtOptions.SectionName)); + services.Configure(configuration.GetSection(AuthSeedOptions.SectionName)); + services.Configure(configuration.GetSection(OpenAiOptions.SectionName)); + + // Prediction service talks to the OpenAI HTTP API, so it needs a typed HttpClient. + services.AddHttpClient(client => + client.Timeout = TimeSpan.FromSeconds(90)); + + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddSingleton(); + + return services; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Persistence/BookieDbContext.cs b/BookieApi/src/Bookie.Infrastructure/Persistence/BookieDbContext.cs new file mode 100644 index 0000000..efa2aac --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Persistence/BookieDbContext.cs @@ -0,0 +1,383 @@ +using Bookie.Domain.Entities; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Persistence; + +/// +/// EF Core context mapped to the existing PostgreSQL "bookie" schema (database-first). +/// All tables/columns are mapped explicitly to their snake_case names. +/// +public class BookieDbContext : DbContext +{ + public BookieDbContext(DbContextOptions options) : base(options) { } + + public DbSet Leagues => Set(); + public DbSet Seasons => Set(); + public DbSet Matchdays => Set(); + public DbSet Teams => Set(); + public DbSet TeamSeasons => Set(); + public DbSet Players => Set(); + public DbSet PlayerContracts => Set(); + public DbSet Matches => Set(); + public DbSet MatchTeamStats => Set(); + public DbSet MatchGoals => Set(); + public DbSet MatchCards => Set(); + public DbSet MatchPenalties => Set(); + public DbSet MatchPredictions => Set(); + public DbSet MatchPredictionOpenAis => Set(); + public DbSet LeagueModelParams => Set(); + public DbSet TeamStrengths => Set(); + public DbSet MatchOdds => Set(); + public DbSet TeamOddsAliases => Set(); + public DbSet MatchExtraOdds => Set(); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.HasDefaultSchema("bookie"); + + modelBuilder.Entity(e => + { + e.ToTable("league"); + e.HasKey(x => x.LeagueId); + e.Property(x => x.LeagueId).HasColumnName("league_id"); + e.Property(x => x.Name).HasColumnName("name").HasMaxLength(100).IsRequired(); + e.Property(x => x.Country).HasColumnName("country").HasMaxLength(100).IsRequired(); + e.Property(x => x.TierLevel).HasColumnName("tier_level").HasDefaultValue((short)1); + e.Property(x => x.CompetitionType).HasColumnName("competition_type").HasMaxLength(20).IsRequired(); + e.Property(x => x.Source).HasColumnName("source").HasMaxLength(200); + e.HasIndex(x => new { x.Name, x.Country }).IsUnique(); + }); + + modelBuilder.Entity(e => + { + e.ToTable("season"); + e.HasKey(x => x.SeasonId); + e.Property(x => x.SeasonId).HasColumnName("season_id"); + e.Property(x => x.LeagueId).HasColumnName("league_id"); + e.Property(x => x.Name).HasColumnName("name").HasMaxLength(20).IsRequired(); + e.Property(x => x.StartDate).HasColumnName("start_date"); + e.Property(x => x.EndDate).HasColumnName("end_date"); + e.HasIndex(x => new { x.LeagueId, x.Name }).IsUnique(); + e.HasOne(x => x.League).WithMany(l => l.Seasons) + .HasForeignKey(x => x.LeagueId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("matchday"); + e.HasKey(x => x.MatchdayId); + e.Property(x => x.MatchdayId).HasColumnName("matchday_id"); + e.Property(x => x.SeasonId).HasColumnName("season_id"); + e.Property(x => x.Number).HasColumnName("number"); + e.Property(x => x.DateFrom).HasColumnName("date_from"); + e.Property(x => x.DateTo).HasColumnName("date_to"); + e.HasIndex(x => new { x.SeasonId, x.Number }).IsUnique(); + e.HasOne(x => x.Season).WithMany(s => s.Matchdays) + .HasForeignKey(x => x.SeasonId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("team"); + e.HasKey(x => x.TeamId); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.Name).HasColumnName("name").HasMaxLength(100).IsRequired(); + e.Property(x => x.ShortName).HasColumnName("short_name").HasMaxLength(10); + e.Property(x => x.City).HasColumnName("city").HasMaxLength(100); + e.Property(x => x.Stadium).HasColumnName("stadium").HasMaxLength(150); + e.Property(x => x.FoundedDate).HasColumnName("founded_date"); + e.HasIndex(x => new { x.Name, x.City }).IsUnique(); + }); + + modelBuilder.Entity(e => + { + e.ToTable("team_season"); + e.HasKey(x => x.TeamSeasonId); + e.Property(x => x.TeamSeasonId).HasColumnName("team_season_id"); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.SeasonId).HasColumnName("season_id"); + e.HasIndex(x => new { x.TeamId, x.SeasonId }).IsUnique(); + e.HasOne(x => x.Team).WithMany(t => t.TeamSeasons) + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Restrict); + e.HasOne(x => x.Season).WithMany(s => s.TeamSeasons) + .HasForeignKey(x => x.SeasonId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("player"); + e.HasKey(x => x.PlayerId); + e.Property(x => x.PlayerId).HasColumnName("player_id"); + e.Property(x => x.FullName).HasColumnName("full_name").HasMaxLength(150).IsRequired(); + e.Property(x => x.BirthDate).HasColumnName("birth_date"); + e.Property(x => x.Nationality).HasColumnName("nationality").HasMaxLength(100); + e.Property(x => x.PrimaryPosition).HasColumnName("primary_position").HasMaxLength(20); + }); + + modelBuilder.Entity(e => + { + e.ToTable("player_contract"); + e.HasKey(x => x.ContractId); + e.Property(x => x.ContractId).HasColumnName("contract_id"); + e.Property(x => x.PlayerId).HasColumnName("player_id"); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.ShirtNumber).HasColumnName("shirt_number"); + e.Property(x => x.StartDate).HasColumnName("start_date"); + e.Property(x => x.EndDate).HasColumnName("end_date"); + e.HasOne(x => x.Player).WithMany(p => p.Contracts) + .HasForeignKey(x => x.PlayerId).OnDelete(DeleteBehavior.Restrict); + e.HasOne(x => x.Team).WithMany(t => t.PlayerContracts) + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("match"); + e.HasKey(x => x.MatchId); + e.Property(x => x.MatchId).HasColumnName("match_id"); + e.Property(x => x.MatchdayId).HasColumnName("matchday_id"); + e.Property(x => x.HomeTeamId).HasColumnName("home_team_id"); + e.Property(x => x.AwayTeamId).HasColumnName("away_team_id"); + e.Property(x => x.KickoffAt).HasColumnName("kickoff_at"); + e.Property(x => x.Stadium).HasColumnName("stadium").HasMaxLength(150); + e.Property(x => x.Referee).HasColumnName("referee").HasMaxLength(150); + e.Property(x => x.Status).HasColumnName("status").HasMaxLength(20).IsRequired(); + e.Property(x => x.HomeScoreHt).HasColumnName("home_score_ht"); + e.Property(x => x.AwayScoreHt).HasColumnName("away_score_ht"); + e.Property(x => x.HomeScoreFt).HasColumnName("home_score_ft"); + e.Property(x => x.AwayScoreFt).HasColumnName("away_score_ft"); + e.Property(x => x.DataSource).HasColumnName("data_source").HasMaxLength(200); + e.Property(x => x.UpdatedAt).HasColumnName("updated_at"); + e.HasIndex(x => x.KickoffAt).HasDatabaseName("idx_match_kickoff"); + e.HasIndex(x => new { x.HomeTeamId, x.AwayTeamId }).HasDatabaseName("idx_match_teams"); + + e.HasOne(x => x.Matchday).WithMany(md => md.Matches) + .HasForeignKey(x => x.MatchdayId).OnDelete(DeleteBehavior.Restrict); + e.HasOne(x => x.HomeTeam).WithMany() + .HasForeignKey(x => x.HomeTeamId).OnDelete(DeleteBehavior.Restrict); + e.HasOne(x => x.AwayTeam).WithMany() + .HasForeignKey(x => x.AwayTeamId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("match_team_stats"); + e.HasKey(x => x.MatchTeamStatsId); + e.Property(x => x.MatchTeamStatsId).HasColumnName("match_team_stats_id"); + e.Property(x => x.MatchId).HasColumnName("match_id"); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.PossessionPct).HasColumnName("possession_pct").HasColumnType("numeric(4,1)"); + e.Property(x => x.ShotsTotal).HasColumnName("shots_total"); + e.Property(x => x.ShotsOnTarget).HasColumnName("shots_on_target"); + e.Property(x => x.Corners).HasColumnName("corners"); + e.Property(x => x.Fouls).HasColumnName("fouls"); + e.Property(x => x.Offsides).HasColumnName("offsides"); + e.Property(x => x.YellowCards).HasColumnName("yellow_cards").HasDefaultValue((short)0); + e.Property(x => x.RedCards).HasColumnName("red_cards").HasDefaultValue((short)0); + e.HasIndex(x => new { x.MatchId, x.TeamId }).IsUnique(); + e.HasOne(x => x.Match).WithMany(m => m.TeamStats) + .HasForeignKey(x => x.MatchId).OnDelete(DeleteBehavior.Cascade); + e.HasOne(x => x.Team).WithMany() + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("match_goal"); + e.HasKey(x => x.GoalId); + e.Property(x => x.GoalId).HasColumnName("goal_id"); + e.Property(x => x.MatchId).HasColumnName("match_id"); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.PlayerId).HasColumnName("player_id"); + e.Property(x => x.AssistPlayerId).HasColumnName("assist_player_id"); + e.Property(x => x.Minute).HasColumnName("minute"); + e.Property(x => x.AddedTime).HasColumnName("added_time").HasDefaultValue((short)0); + e.Property(x => x.GoalType).HasColumnName("goal_type").HasMaxLength(20).IsRequired(); + e.HasOne(x => x.Match).WithMany(m => m.Goals) + .HasForeignKey(x => x.MatchId).OnDelete(DeleteBehavior.Cascade); + e.HasOne(x => x.Team).WithMany() + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Restrict); + e.HasOne(x => x.Player).WithMany() + .HasForeignKey(x => x.PlayerId).OnDelete(DeleteBehavior.Restrict); + e.HasOne(x => x.AssistPlayer).WithMany() + .HasForeignKey(x => x.AssistPlayerId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("match_card"); + e.HasKey(x => x.CardId); + e.Property(x => x.CardId).HasColumnName("card_id"); + e.Property(x => x.MatchId).HasColumnName("match_id"); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.PlayerId).HasColumnName("player_id"); + e.Property(x => x.Minute).HasColumnName("minute"); + e.Property(x => x.CardType).HasColumnName("card_type").HasMaxLength(10).IsRequired(); + e.Property(x => x.Reason).HasColumnName("reason").HasMaxLength(200); + e.HasOne(x => x.Match).WithMany(m => m.Cards) + .HasForeignKey(x => x.MatchId).OnDelete(DeleteBehavior.Cascade); + e.HasOne(x => x.Team).WithMany() + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Restrict); + e.HasOne(x => x.Player).WithMany() + .HasForeignKey(x => x.PlayerId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("match_penalty"); + e.HasKey(x => x.PenaltyId); + e.Property(x => x.PenaltyId).HasColumnName("penalty_id"); + e.Property(x => x.MatchId).HasColumnName("match_id"); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.PlayerId).HasColumnName("player_id"); + e.Property(x => x.Minute).HasColumnName("minute"); + e.Property(x => x.Result).HasColumnName("result").HasMaxLength(20).IsRequired(); + e.Property(x => x.Reason).HasColumnName("reason").HasMaxLength(200); + e.HasOne(x => x.Match).WithMany(m => m.Penalties) + .HasForeignKey(x => x.MatchId).OnDelete(DeleteBehavior.Cascade); + e.HasOne(x => x.Team).WithMany() + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Restrict); + e.HasOne(x => x.Player).WithMany() + .HasForeignKey(x => x.PlayerId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("match_prediction"); + e.HasKey(x => x.PredictionId); + e.Property(x => x.PredictionId).HasColumnName("prediction_id"); + e.Property(x => x.MatchId).HasColumnName("match_id"); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.PredictedGoals).HasColumnName("predicted_goals").HasColumnType("numeric(4,2)"); + e.Property(x => x.PredictedShotsTotal).HasColumnName("predicted_shots_total").HasColumnType("numeric(4,2)"); + e.Property(x => x.PredictedShotsOnTarget).HasColumnName("predicted_shots_on_target").HasColumnType("numeric(4,2)"); + e.Property(x => x.PredictedCorners).HasColumnName("predicted_corners").HasColumnType("numeric(4,2)"); + e.Property(x => x.PredictedFouls).HasColumnName("predicted_fouls").HasColumnType("numeric(4,2)"); + e.Property(x => x.PredictedYellowCards).HasColumnName("predicted_yellow_cards").HasColumnType("numeric(4,2)"); + e.Property(x => x.ModelTrainedAt).HasColumnName("model_trained_at"); + e.Property(x => x.HalfLifeDays).HasColumnName("half_life_days"); + e.Property(x => x.PredictedAt).HasColumnName("predicted_at"); + e.HasIndex(x => new { x.MatchId, x.TeamId }).IsUnique(); + e.HasOne(x => x.Match).WithMany() + .HasForeignKey(x => x.MatchId).OnDelete(DeleteBehavior.Cascade); + e.HasOne(x => x.Team).WithMany() + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("match_prediction_openai"); + e.HasKey(x => x.PredictionId); + e.Property(x => x.PredictionId).HasColumnName("prediction_id"); + e.Property(x => x.MatchId).HasColumnName("match_id"); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.PredictedGoals).HasColumnName("predicted_goals").HasColumnType("numeric(6,2)"); + e.Property(x => x.GoalsLow).HasColumnName("goals_low").HasColumnType("numeric(6,2)"); + e.Property(x => x.GoalsHigh).HasColumnName("goals_high").HasColumnType("numeric(6,2)"); + e.Property(x => x.PredictedShotsOnTarget).HasColumnName("predicted_shots_on_target").HasColumnType("numeric(6,2)"); + e.Property(x => x.ShotsOnTargetLow).HasColumnName("shots_on_target_low").HasColumnType("numeric(6,2)"); + e.Property(x => x.ShotsOnTargetHigh).HasColumnName("shots_on_target_high").HasColumnType("numeric(6,2)"); + e.Property(x => x.PredictedCorners).HasColumnName("predicted_corners").HasColumnType("numeric(6,2)"); + e.Property(x => x.CornersLow).HasColumnName("corners_low").HasColumnType("numeric(6,2)"); + e.Property(x => x.CornersHigh).HasColumnName("corners_high").HasColumnType("numeric(6,2)"); + e.Property(x => x.PredictedFouls).HasColumnName("predicted_fouls").HasColumnType("numeric(6,2)"); + e.Property(x => x.FoulsLow).HasColumnName("fouls_low").HasColumnType("numeric(6,2)"); + e.Property(x => x.FoulsHigh).HasColumnName("fouls_high").HasColumnType("numeric(6,2)"); + e.Property(x => x.PredictedYellowCards).HasColumnName("predicted_yellow_cards").HasColumnType("numeric(6,2)"); + e.Property(x => x.YellowCardsLow).HasColumnName("yellow_cards_low").HasColumnType("numeric(6,2)"); + e.Property(x => x.YellowCardsHigh).HasColumnName("yellow_cards_high").HasColumnType("numeric(6,2)"); + e.Property(x => x.PredictedRedCards).HasColumnName("predicted_red_cards").HasColumnType("numeric(6,2)"); + e.Property(x => x.RedCardsLow).HasColumnName("red_cards_low").HasColumnType("numeric(6,2)"); + e.Property(x => x.RedCardsHigh).HasColumnName("red_cards_high").HasColumnType("numeric(6,2)"); + e.Property(x => x.Confidence).HasColumnName("confidence"); + e.Property(x => x.Reasoning).HasColumnName("reasoning"); + e.Property(x => x.Model).HasColumnName("model"); + e.Property(x => x.PredictedAt).HasColumnName("predicted_at"); + e.HasOne(x => x.Match).WithMany() + .HasForeignKey(x => x.MatchId).OnDelete(DeleteBehavior.Cascade); + e.HasOne(x => x.Team).WithMany() + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity(e => + { + e.ToTable("league_model_param"); + e.HasKey(x => x.LeagueId); + e.Property(x => x.LeagueId).HasColumnName("league_id"); + e.Property(x => x.HomeAdvantage).HasColumnName("home_advantage").HasColumnType("numeric(6,4)"); + e.Property(x => x.Rho).HasColumnName("rho").HasColumnType("numeric(6,5)"); + e.Property(x => x.AvgHomeGoals).HasColumnName("avg_home_goals").HasColumnType("numeric(5,3)"); + e.Property(x => x.AvgAwayGoals).HasColumnName("avg_away_goals").HasColumnType("numeric(5,3)"); + e.Property(x => x.MatchesUsed).HasColumnName("matches_used"); + e.Property(x => x.HalfLifeDays).HasColumnName("half_life_days"); + e.Property(x => x.TrainedAt).HasColumnName("trained_at"); + e.HasOne(x => x.League).WithMany() + .HasForeignKey(x => x.LeagueId).OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity(e => + { + e.ToTable("team_strength"); + e.HasKey(x => x.TeamStrengthId); + e.Property(x => x.TeamStrengthId).HasColumnName("team_strength_id"); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.LeagueId).HasColumnName("league_id"); + e.Property(x => x.LogAttack).HasColumnName("log_attack").HasColumnType("numeric(7,4)"); + e.Property(x => x.LogDefense).HasColumnName("log_defense").HasColumnType("numeric(7,4)"); + e.Property(x => x.MatchesUsed).HasColumnName("matches_used"); + e.Property(x => x.TrainedAt).HasColumnName("trained_at"); + e.HasIndex(x => new { x.TeamId, x.LeagueId }).IsUnique(); + e.HasOne(x => x.Team).WithMany() + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Cascade); + e.HasOne(x => x.League).WithMany() + .HasForeignKey(x => x.LeagueId).OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity(e => + { + e.ToTable("match_odds"); + e.HasKey(x => x.MatchOddsId); + e.Property(x => x.MatchOddsId).HasColumnName("match_odds_id"); + e.Property(x => x.MatchId).HasColumnName("match_id"); + e.Property(x => x.Bookmaker).HasColumnName("bookmaker").HasMaxLength(100); + e.Property(x => x.HomeOdds).HasColumnName("home_odds").HasColumnType("numeric(7,3)"); + e.Property(x => x.DrawOdds).HasColumnName("draw_odds").HasColumnType("numeric(7,3)"); + e.Property(x => x.AwayOdds).HasColumnName("away_odds").HasColumnType("numeric(7,3)"); + e.Property(x => x.TotalLine).HasColumnName("total_line").HasColumnType("numeric(4,2)"); + e.Property(x => x.OverOdds).HasColumnName("over_odds").HasColumnType("numeric(7,3)"); + e.Property(x => x.UnderOdds).HasColumnName("under_odds").HasColumnType("numeric(7,3)"); + e.Property(x => x.FetchedAt).HasColumnName("fetched_at"); + e.HasIndex(x => new { x.MatchId, x.Bookmaker }).IsUnique(); + e.HasOne(x => x.Match).WithMany() + .HasForeignKey(x => x.MatchId).OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity(e => + { + e.ToTable("team_odds_alias"); + e.HasKey(x => x.TeamId); + e.Property(x => x.TeamId).HasColumnName("team_id"); + e.Property(x => x.OddsApiName).HasColumnName("odds_api_name").HasMaxLength(150); + e.HasIndex(x => x.OddsApiName).IsUnique(); + e.HasOne(x => x.Team).WithMany() + .HasForeignKey(x => x.TeamId).OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity(e => + { + e.ToTable("match_extra_odds"); + e.HasKey(x => x.MatchExtraOddsId); + e.Property(x => x.MatchExtraOddsId).HasColumnName("match_extra_odds_id"); + e.Property(x => x.MatchId).HasColumnName("match_id"); + e.Property(x => x.Market).HasColumnName("market").HasMaxLength(50); + e.Property(x => x.Bookmaker).HasColumnName("bookmaker").HasMaxLength(100); + e.Property(x => x.Line).HasColumnName("line").HasColumnType("numeric(5,2)"); + e.Property(x => x.OverOdds).HasColumnName("over_odds").HasColumnType("numeric(7,3)"); + e.Property(x => x.UnderOdds).HasColumnName("under_odds").HasColumnType("numeric(7,3)"); + e.Property(x => x.FetchedAt).HasColumnName("fetched_at"); + e.HasIndex(x => new { x.MatchId, x.Market, x.Bookmaker }).IsUnique(); + e.HasOne(x => x.Match).WithMany() + .HasForeignKey(x => x.MatchId).OnDelete(DeleteBehavior.Cascade); + }); + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Predictions/OpenAiOptions.cs b/BookieApi/src/Bookie.Infrastructure/Predictions/OpenAiOptions.cs new file mode 100644 index 0000000..fcc7eb2 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Predictions/OpenAiOptions.cs @@ -0,0 +1,22 @@ +namespace Bookie.Infrastructure.Predictions; + +/// Configuration for the OpenAI-backed prediction service. +public class OpenAiOptions +{ + public const string SectionName = "OpenAI"; + + /// OpenAI API key. Falls back to the OPENAI_API_KEY environment variable when empty. + public string ApiKey { get; set; } = ""; + + /// Chat model to use. Must support structured outputs (json_schema). + public string Model { get; set; } = "gpt-5.6-luna"; + + public string BaseUrl { get; set; } = "https://api.openai.com/v1"; + + /// + /// Sampling temperature. Left at the model default (1) it is not sent at all — some newer + /// models (e.g. GPT-5.x) reject any non-default value. Set a different value only for models + /// that support custom sampling. + /// + public double Temperature { get; set; } = 1.0; +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/DashboardService.cs b/BookieApi/src/Bookie.Infrastructure/Services/DashboardService.cs new file mode 100644 index 0000000..2b6a0b4 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/DashboardService.cs @@ -0,0 +1,54 @@ +using Bookie.Application.DTOs.Dashboard; +using Bookie.Application.Interfaces; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +public class DashboardService : IDashboardService +{ + private readonly BookieDbContext _db; + public DashboardService(BookieDbContext db) => _db = db; + + public async Task GetSummaryAsync(CancellationToken ct = default) + { + var now = DateTime.Now; + var weekAhead = now.AddDays(7); + + var summary = new DashboardSummaryDto + { + LeagueCount = await _db.Leagues.CountAsync(ct), + SeasonCount = await _db.Seasons.CountAsync(ct), + TeamCount = await _db.Teams.CountAsync(ct), + PlayerCount = await _db.Players.CountAsync(ct), + MatchCount = await _db.Matches.CountAsync(ct), + FinishedMatches = await _db.Matches.CountAsync(m => m.Status == "finished", ct), + UpcomingMatchesThisWeek = await _db.Matches.CountAsync( + m => m.KickoffAt >= now && m.KickoffAt <= weekAhead + && (m.Status == "scheduled" || m.Status == "live"), ct) + }; + + summary.NextMatches = await _db.Matches.AsNoTracking() + .Where(m => m.KickoffAt >= now && m.Status == "scheduled") + .OrderBy(m => m.KickoffAt) + .Take(8) + .Select(m => new UpcomingMatchDto + { + MatchId = m.MatchId, + KickoffAt = m.KickoffAt, + HomeTeamName = m.HomeTeam.Name, + AwayTeamName = m.AwayTeam.Name, + LeagueName = m.Matchday.Season.League.Name, + Country = m.Matchday.Season.League.Country, + Status = m.Status + }) + .ToListAsync(ct); + + summary.StatusBreakdown = await _db.Matches.AsNoTracking() + .GroupBy(m => m.Status) + .Select(g => new StatusBreakdownDto { Status = g.Key, Count = g.Count() }) + .ToListAsync(ct); + + return summary; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/LeagueService.cs b/BookieApi/src/Bookie.Infrastructure/Services/LeagueService.cs new file mode 100644 index 0000000..5ebcddd --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/LeagueService.cs @@ -0,0 +1,111 @@ +using Bookie.Application.DTOs.Common; +using Bookie.Application.DTOs.Leagues; +using Bookie.Application.Interfaces; +using Bookie.Domain.Entities; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +public class LeagueService : ILeagueService +{ + private readonly BookieDbContext _db; + public LeagueService(BookieDbContext db) => _db = db; + + private static LeagueDto ToDto(League l) => new() + { + LeagueId = l.LeagueId, + Name = l.Name, + Country = l.Country, + TierLevel = l.TierLevel, + CompetitionType = l.CompetitionType, + Source = l.Source, + SeasonCount = l.Seasons?.Count ?? 0 + }; + + public async Task> GetPagedAsync(PagedQuery q, CancellationToken ct = default) + { + var query = _db.Leagues.AsNoTracking() + .Select(l => new LeagueDto + { + LeagueId = l.LeagueId, + Name = l.Name, + Country = l.Country, + TierLevel = l.TierLevel, + CompetitionType = l.CompetitionType, + Source = l.Source, + SeasonCount = l.Seasons.Count + }); + + if (!string.IsNullOrWhiteSpace(q.Search)) + { + var s = q.Search.Trim(); + query = query.Where(l => EF.Functions.ILike(l.Name, $"%{s}%") + || EF.Functions.ILike(l.Country, $"%{s}%")); + } + + if (q.Filter("name") is { } name) + query = query.Where(l => EF.Functions.ILike(l.Name, $"%{name}%")); + if (q.Filter("country") is { } country) + query = query.Where(l => EF.Functions.ILike(l.Country, $"%{country}%")); + if (q.Filter("competitionType") is { } comp) + query = query.Where(l => l.CompetitionType == comp); + + query = (q.SortBy?.ToLowerInvariant()) switch + { + "country" => q.SortDesc ? query.OrderByDescending(x => x.Country) : query.OrderBy(x => x.Country), + "tierlevel" => q.SortDesc ? query.OrderByDescending(x => x.TierLevel) : query.OrderBy(x => x.TierLevel), + "competitiontype" => q.SortDesc ? query.OrderByDescending(x => x.CompetitionType) : query.OrderBy(x => x.CompetitionType), + _ => q.SortDesc ? query.OrderByDescending(x => x.Name) : query.OrderBy(x => x.Name) + }; + + var total = await query.CountAsync(ct); + var items = await query.Skip((q.Page - 1) * q.PageSize).Take(q.PageSize).ToListAsync(ct); + return new PagedResult { Items = items, TotalCount = total, Page = q.Page, PageSize = q.PageSize }; + } + + public async Task GetByIdAsync(int id, CancellationToken ct = default) + { + var l = await _db.Leagues.AsNoTracking().Include(x => x.Seasons) + .FirstOrDefaultAsync(x => x.LeagueId == id, ct); + return l is null ? null : ToDto(l); + } + + public async Task CreateAsync(LeagueCreateDto dto, CancellationToken ct = default) + { + var entity = new League + { + Name = dto.Name, + Country = dto.Country, + TierLevel = dto.TierLevel, + CompetitionType = dto.CompetitionType, + Source = dto.Source + }; + _db.Leagues.Add(entity); + await _db.SaveChangesAsync(ct); + return ToDto(entity); + } + + public async Task UpdateAsync(int id, LeagueUpdateDto dto, CancellationToken ct = default) + { + var entity = await _db.Leagues.FirstOrDefaultAsync(x => x.LeagueId == id, ct); + if (entity is null) return null; + + entity.Name = dto.Name; + entity.Country = dto.Country; + entity.TierLevel = dto.TierLevel; + entity.CompetitionType = dto.CompetitionType; + entity.Source = dto.Source; + await _db.SaveChangesAsync(ct); + return ToDto(entity); + } + + public async Task DeleteAsync(int id, CancellationToken ct = default) + { + var entity = await _db.Leagues.FirstOrDefaultAsync(x => x.LeagueId == id, ct); + if (entity is null) return false; + _db.Leagues.Remove(entity); + await _db.SaveChangesAsync(ct); + return true; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/LookupService.cs b/BookieApi/src/Bookie.Infrastructure/Services/LookupService.cs new file mode 100644 index 0000000..0eaf4cf --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/LookupService.cs @@ -0,0 +1,68 @@ +using Bookie.Application.DTOs.Common; +using Bookie.Application.Interfaces; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +public class LookupService : ILookupService +{ + private readonly BookieDbContext _db; + public LookupService(BookieDbContext db) => _db = db; + + public async Task> LeaguesAsync(CancellationToken ct = default) => + await _db.Leagues.AsNoTracking().OrderBy(x => x.Name) + .Select(x => new LookupDto { Id = x.LeagueId, Name = x.Name + " (" + x.Country + ")" }) + .ToListAsync(ct); + + public async Task> SeasonsAsync(int? leagueId = null, CancellationToken ct = default) + { + var query = _db.Seasons.AsNoTracking().AsQueryable(); + if (leagueId is { } lid) + query = query.Where(x => x.LeagueId == lid); + return await query.OrderByDescending(x => x.StartDate) + .Select(x => new LookupDto { Id = x.SeasonId, Name = x.League.Name + " " + x.Name }) + .ToListAsync(ct); + } + + public async Task> TeamsAsync(int? leagueId = null, int? seasonId = null, CancellationToken ct = default) + { + // When a season/league is chosen, only list teams that competed in it (via team_season). + if (seasonId is { } sid) + { + return await _db.TeamSeasons.AsNoTracking() + .Where(ts => ts.SeasonId == sid) + .Select(ts => new LookupDto { Id = ts.Team.TeamId, Name = ts.Team.Name }) + .Distinct() + .OrderBy(x => x.Name) + .ToListAsync(ct); + } + if (leagueId is { } lid) + { + return await _db.TeamSeasons.AsNoTracking() + .Where(ts => ts.Season.LeagueId == lid) + .Select(ts => new LookupDto { Id = ts.Team.TeamId, Name = ts.Team.Name }) + .Distinct() + .OrderBy(x => x.Name) + .ToListAsync(ct); + } + return await _db.Teams.AsNoTracking().OrderBy(x => x.Name) + .Select(x => new LookupDto { Id = x.TeamId, Name = x.Name }) + .ToListAsync(ct); + } + + public async Task> PlayersAsync(CancellationToken ct = default) => + await _db.Players.AsNoTracking().OrderBy(x => x.FullName) + .Select(x => new LookupDto { Id = x.PlayerId, Name = x.FullName }) + .ToListAsync(ct); + + public async Task> MatchdaysAsync(CancellationToken ct = default) => + await _db.Matchdays.AsNoTracking() + .OrderBy(x => x.Season.League.Name).ThenBy(x => x.Season.Name).ThenBy(x => x.Number) + .Select(x => new LookupDto + { + Id = x.MatchdayId, + Name = x.Season.League.Name + " " + x.Season.Name + " - Round " + x.Number + }) + .ToListAsync(ct); +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/MatchService.cs b/BookieApi/src/Bookie.Infrastructure/Services/MatchService.cs new file mode 100644 index 0000000..2673884 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/MatchService.cs @@ -0,0 +1,143 @@ +using Bookie.Application.DTOs.Common; +using Bookie.Application.DTOs.Matches; +using Bookie.Application.Interfaces; +using Bookie.Domain.Entities; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +public class MatchService : IMatchService +{ + private readonly BookieDbContext _db; + public MatchService(BookieDbContext db) => _db = db; + + private IQueryable Projected() => + _db.Matches.AsNoTracking().Select(m => new MatchDto + { + MatchId = m.MatchId, + MatchdayId = m.MatchdayId, + MatchdayNumber = m.Matchday.Number, + SeasonId = m.Matchday.SeasonId, + SeasonName = m.Matchday.Season.Name, + LeagueId = m.Matchday.Season.LeagueId, + LeagueName = m.Matchday.Season.League.Name, + Country = m.Matchday.Season.League.Country, + HomeTeamId = m.HomeTeamId, + HomeTeamName = m.HomeTeam.Name, + AwayTeamId = m.AwayTeamId, + AwayTeamName = m.AwayTeam.Name, + KickoffAt = m.KickoffAt, + Stadium = m.Stadium, + Referee = m.Referee, + Status = m.Status, + HomeScoreHt = m.HomeScoreHt, + AwayScoreHt = m.AwayScoreHt, + HomeScoreFt = m.HomeScoreFt, + AwayScoreFt = m.AwayScoreFt, + DataSource = m.DataSource + }); + + public async Task> GetPagedAsync(PagedQuery q, CancellationToken ct = default) + { + var query = Projected(); + + if (!string.IsNullOrWhiteSpace(q.Search)) + { + var s = q.Search.Trim(); + query = query.Where(m => EF.Functions.ILike(m.HomeTeamName, $"%{s}%") + || EF.Functions.ILike(m.AwayTeamName, $"%{s}%") + || EF.Functions.ILike(m.LeagueName, $"%{s}%") + || EF.Functions.ILike(m.Status, $"%{s}%")); + } + + if (q.Filter("seasonId") is { } sid && int.TryParse(sid, out var seasonId)) + query = query.Where(m => m.SeasonId == seasonId); + if (q.Filter("leagueId") is { } lid && int.TryParse(lid, out var leagueId)) + query = query.Where(m => m.LeagueId == leagueId); + if (q.Filter("teamId") is { } tid && int.TryParse(tid, out var teamId)) + query = query.Where(m => m.HomeTeamId == teamId || m.AwayTeamId == teamId); + if (q.Filter("status") is { } status) + query = query.Where(m => m.Status == status); + if (q.Filter("dateFrom") is { } df && DateTime.TryParse(df, out var from)) + { + var fromDate = DateTime.SpecifyKind(from.Date, DateTimeKind.Unspecified); + query = query.Where(m => m.KickoffAt >= fromDate); + } + if (q.Filter("dateTo") is { } dt && DateTime.TryParse(dt, out var to)) + { + var toEnd = DateTime.SpecifyKind(to.Date.AddDays(1), DateTimeKind.Unspecified); + query = query.Where(m => m.KickoffAt < toEnd); + } + + query = (q.SortBy?.ToLowerInvariant()) switch + { + "status" => q.SortDesc ? query.OrderByDescending(x => x.Status) : query.OrderBy(x => x.Status), + "league" => q.SortDesc ? query.OrderByDescending(x => x.LeagueName) : query.OrderBy(x => x.LeagueName), + "hometeam" => q.SortDesc ? query.OrderByDescending(x => x.HomeTeamName) : query.OrderBy(x => x.HomeTeamName), + _ => q.SortDesc ? query.OrderByDescending(x => x.KickoffAt) : query.OrderBy(x => x.KickoffAt) + }; + + var total = await query.CountAsync(ct); + var items = await query.Skip((q.Page - 1) * q.PageSize).Take(q.PageSize).ToListAsync(ct); + return new PagedResult { Items = items, TotalCount = total, Page = q.Page, PageSize = q.PageSize }; + } + + public Task GetByIdAsync(int id, CancellationToken ct = default) => + Projected().FirstOrDefaultAsync(x => x.MatchId == id, ct); + + public async Task CreateAsync(MatchCreateDto dto, CancellationToken ct = default) + { + var entity = new Match + { + MatchdayId = dto.MatchdayId, + HomeTeamId = dto.HomeTeamId, + AwayTeamId = dto.AwayTeamId, + KickoffAt = DateTime.SpecifyKind(dto.KickoffAt, DateTimeKind.Unspecified), + Stadium = dto.Stadium, + Referee = dto.Referee, + Status = dto.Status, + HomeScoreHt = dto.HomeScoreHt, + AwayScoreHt = dto.AwayScoreHt, + HomeScoreFt = dto.HomeScoreFt, + AwayScoreFt = dto.AwayScoreFt, + DataSource = dto.DataSource, + // "updated_at" is a timestamp WITHOUT time zone; use Unspecified kind for Npgsql. + UpdatedAt = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Unspecified) + }; + _db.Matches.Add(entity); + await _db.SaveChangesAsync(ct); + return (await GetByIdAsync(entity.MatchId, ct))!; + } + + public async Task UpdateAsync(int id, MatchUpdateDto dto, CancellationToken ct = default) + { + var entity = await _db.Matches.FirstOrDefaultAsync(x => x.MatchId == id, ct); + if (entity is null) return null; + + entity.MatchdayId = dto.MatchdayId; + entity.HomeTeamId = dto.HomeTeamId; + entity.AwayTeamId = dto.AwayTeamId; + entity.KickoffAt = DateTime.SpecifyKind(dto.KickoffAt, DateTimeKind.Unspecified); + entity.Stadium = dto.Stadium; + entity.Referee = dto.Referee; + entity.Status = dto.Status; + entity.HomeScoreHt = dto.HomeScoreHt; + entity.AwayScoreHt = dto.AwayScoreHt; + entity.HomeScoreFt = dto.HomeScoreFt; + entity.AwayScoreFt = dto.AwayScoreFt; + entity.DataSource = dto.DataSource; + entity.UpdatedAt = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Unspecified); + await _db.SaveChangesAsync(ct); + return await GetByIdAsync(id, ct); + } + + public async Task DeleteAsync(int id, CancellationToken ct = default) + { + var entity = await _db.Matches.FirstOrDefaultAsync(x => x.MatchId == id, ct); + if (entity is null) return false; + _db.Matches.Remove(entity); + await _db.SaveChangesAsync(ct); + return true; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/PlayerContractService.cs b/BookieApi/src/Bookie.Infrastructure/Services/PlayerContractService.cs new file mode 100644 index 0000000..f0a9145 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/PlayerContractService.cs @@ -0,0 +1,104 @@ +using Bookie.Application.DTOs.Common; +using Bookie.Application.DTOs.Contracts; +using Bookie.Application.Interfaces; +using Bookie.Domain.Entities; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +public class PlayerContractService : IPlayerContractService +{ + private readonly BookieDbContext _db; + public PlayerContractService(BookieDbContext db) => _db = db; + + private IQueryable Projected() => + _db.PlayerContracts.AsNoTracking().Select(c => new PlayerContractDto + { + ContractId = c.ContractId, + PlayerId = c.PlayerId, + PlayerName = c.Player.FullName, + TeamId = c.TeamId, + TeamName = c.Team.Name, + ShirtNumber = c.ShirtNumber, + StartDate = c.StartDate, + EndDate = c.EndDate + }); + + public async Task> GetPagedAsync(PagedQuery q, CancellationToken ct = default) + { + var query = Projected(); + + if (!string.IsNullOrWhiteSpace(q.Search)) + { + var s = q.Search.Trim(); + query = query.Where(c => EF.Functions.ILike(c.PlayerName, $"%{s}%") + || EF.Functions.ILike(c.TeamName, $"%{s}%")); + } + + if (q.Filter("playerName") is { } player) + query = query.Where(c => EF.Functions.ILike(c.PlayerName, $"%{player}%")); + if (q.Filter("teamName") is { } team) + query = query.Where(c => EF.Functions.ILike(c.TeamName, $"%{team}%")); + if (q.Filter("current") is { } current) + query = current == "true" + ? query.Where(c => c.EndDate == null) + : query.Where(c => c.EndDate != null); + + query = (q.SortBy?.ToLowerInvariant()) switch + { + "team" => q.SortDesc ? query.OrderByDescending(x => x.TeamName) : query.OrderBy(x => x.TeamName), + "startdate" => q.SortDesc ? query.OrderByDescending(x => x.StartDate) : query.OrderBy(x => x.StartDate), + _ => q.SortDesc ? query.OrderByDescending(x => x.PlayerName) : query.OrderBy(x => x.PlayerName) + }; + + var total = await query.CountAsync(ct); + var items = await query.Skip((q.Page - 1) * q.PageSize).Take(q.PageSize).ToListAsync(ct); + return new PagedResult { Items = items, TotalCount = total, Page = q.Page, PageSize = q.PageSize }; + } + + public Task GetByIdAsync(int id, CancellationToken ct = default) => + Projected().FirstOrDefaultAsync(x => x.ContractId == id, ct); + + public async Task> GetByPlayerAsync(int playerId, CancellationToken ct = default) => + await Projected().Where(x => x.PlayerId == playerId) + .OrderByDescending(x => x.StartDate).ToListAsync(ct); + + public async Task CreateAsync(PlayerContractCreateDto dto, CancellationToken ct = default) + { + var entity = new PlayerContract + { + PlayerId = dto.PlayerId, + TeamId = dto.TeamId, + ShirtNumber = dto.ShirtNumber, + StartDate = dto.StartDate, + EndDate = dto.EndDate + }; + _db.PlayerContracts.Add(entity); + await _db.SaveChangesAsync(ct); + return (await GetByIdAsync(entity.ContractId, ct))!; + } + + public async Task UpdateAsync(int id, PlayerContractUpdateDto dto, CancellationToken ct = default) + { + var entity = await _db.PlayerContracts.FirstOrDefaultAsync(x => x.ContractId == id, ct); + if (entity is null) return null; + + entity.PlayerId = dto.PlayerId; + entity.TeamId = dto.TeamId; + entity.ShirtNumber = dto.ShirtNumber; + entity.StartDate = dto.StartDate; + entity.EndDate = dto.EndDate; + await _db.SaveChangesAsync(ct); + return await GetByIdAsync(id, ct); + } + + public async Task DeleteAsync(int id, CancellationToken ct = default) + { + var entity = await _db.PlayerContracts.FirstOrDefaultAsync(x => x.ContractId == id, ct); + if (entity is null) return false; + _db.PlayerContracts.Remove(entity); + await _db.SaveChangesAsync(ct); + return true; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/PlayerService.cs b/BookieApi/src/Bookie.Infrastructure/Services/PlayerService.cs new file mode 100644 index 0000000..e1d1ca3 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/PlayerService.cs @@ -0,0 +1,102 @@ +using Bookie.Application.DTOs.Common; +using Bookie.Application.DTOs.Players; +using Bookie.Application.Interfaces; +using Bookie.Domain.Entities; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +public class PlayerService : IPlayerService +{ + private readonly BookieDbContext _db; + public PlayerService(BookieDbContext db) => _db = db; + + private static PlayerDto ToDto(Player p) => new() + { + PlayerId = p.PlayerId, + FullName = p.FullName, + BirthDate = p.BirthDate, + Nationality = p.Nationality, + PrimaryPosition = p.PrimaryPosition + }; + + public async Task> GetPagedAsync(PagedQuery q, CancellationToken ct = default) + { + var query = _db.Players.AsNoTracking(); + + if (!string.IsNullOrWhiteSpace(q.Search)) + { + var s = q.Search.Trim(); + query = query.Where(p => EF.Functions.ILike(p.FullName, $"%{s}%") + || (p.Nationality != null && EF.Functions.ILike(p.Nationality, $"%{s}%"))); + } + + if (q.Filter("fullName") is { } name) + query = query.Where(p => EF.Functions.ILike(p.FullName, $"%{name}%")); + if (q.Filter("nationality") is { } nat) + query = query.Where(p => p.Nationality != null && EF.Functions.ILike(p.Nationality, $"%{nat}%")); + if (q.Filter("position") is { } pos) + query = query.Where(p => p.PrimaryPosition == pos); + + query = (q.SortBy?.ToLowerInvariant()) switch + { + "nationality" => q.SortDesc ? query.OrderByDescending(x => x.Nationality) : query.OrderBy(x => x.Nationality), + "position" => q.SortDesc ? query.OrderByDescending(x => x.PrimaryPosition) : query.OrderBy(x => x.PrimaryPosition), + "birthdate" => q.SortDesc ? query.OrderByDescending(x => x.BirthDate) : query.OrderBy(x => x.BirthDate), + _ => q.SortDesc ? query.OrderByDescending(x => x.FullName) : query.OrderBy(x => x.FullName) + }; + + var total = await query.CountAsync(ct); + var entities = await query.Skip((q.Page - 1) * q.PageSize).Take(q.PageSize).ToListAsync(ct); + return new PagedResult + { + Items = entities.Select(ToDto).ToList(), + TotalCount = total, + Page = q.Page, + PageSize = q.PageSize + }; + } + + public async Task GetByIdAsync(int id, CancellationToken ct = default) + { + var p = await _db.Players.AsNoTracking().FirstOrDefaultAsync(x => x.PlayerId == id, ct); + return p is null ? null : ToDto(p); + } + + public async Task CreateAsync(PlayerCreateDto dto, CancellationToken ct = default) + { + var entity = new Player + { + FullName = dto.FullName, + BirthDate = dto.BirthDate, + Nationality = dto.Nationality, + PrimaryPosition = dto.PrimaryPosition + }; + _db.Players.Add(entity); + await _db.SaveChangesAsync(ct); + return ToDto(entity); + } + + public async Task UpdateAsync(int id, PlayerUpdateDto dto, CancellationToken ct = default) + { + var entity = await _db.Players.FirstOrDefaultAsync(x => x.PlayerId == id, ct); + if (entity is null) return null; + + entity.FullName = dto.FullName; + entity.BirthDate = dto.BirthDate; + entity.Nationality = dto.Nationality; + entity.PrimaryPosition = dto.PrimaryPosition; + await _db.SaveChangesAsync(ct); + return ToDto(entity); + } + + public async Task DeleteAsync(int id, CancellationToken ct = default) + { + var entity = await _db.Players.FirstOrDefaultAsync(x => x.PlayerId == id, ct); + if (entity is null) return false; + _db.Players.Remove(entity); + await _db.SaveChangesAsync(ct); + return true; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/PreMatchReportService.cs b/BookieApi/src/Bookie.Infrastructure/Services/PreMatchReportService.cs new file mode 100644 index 0000000..5540ef7 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/PreMatchReportService.cs @@ -0,0 +1,801 @@ +using Bookie.Application.DTOs.Reports; +using Bookie.Application.Interfaces; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +/// +/// Faithful port of report.py. Instead of running four queries per team per match +/// (which would be N+1), it loads all season-scoped matches/stats/goals that could be +/// relevant in a small number of set-based queries, then computes each team block in memory +/// using the exact same filter: same season, kickoff_at < match kickoff, match_id != this match. +/// +public class PreMatchReportService : IPreMatchReportService +{ + private readonly BookieDbContext _db; + + public PreMatchReportService(BookieDbContext db) => _db = db; + + public async Task GetPreMatchReportAsync(DateOnly date, int seasonsBack = 0, CancellationToken ct = default) + { + if (seasonsBack < 0) seasonsBack = 0; + if (seasonsBack > 10) seasonsBack = 10; + + var result = new PreMatchReportDto { Date = date, SeasonsBack = seasonsBack }; + + var dayStart = date.ToDateTime(TimeOnly.MinValue); + var dayEnd = dayStart.AddDays(1); + + // 1) All matches scheduled on the target date (any status), with league/season context. + var dayMatches = await _db.Matches + .AsNoTracking() + .Where(m => m.KickoffAt >= dayStart && m.KickoffAt < dayEnd) + .Select(m => new + { + m.MatchId, + m.KickoffAt, + m.Status, + m.Stadium, + m.Referee, + m.HomeScoreHt, + m.AwayScoreHt, + m.HomeScoreFt, + m.AwayScoreFt, + m.HomeTeamId, + HomeTeamName = m.HomeTeam.Name, + m.AwayTeamId, + AwayTeamName = m.AwayTeam.Name, + SeasonId = m.Matchday.SeasonId, + SeasonName = m.Matchday.Season.Name, + LeagueId = m.Matchday.Season.LeagueId, + LeagueName = m.Matchday.Season.League.Name, + Country = m.Matchday.Season.League.Country + }) + .OrderBy(m => m.Country).ThenBy(m => m.LeagueName).ThenBy(m => m.KickoffAt) + .ToListAsync(ct); + + result.MatchCount = dayMatches.Count; + if (dayMatches.Count == 0) + return result; + + var maxKickoff = dayMatches.Max(m => m.KickoffAt); + + // 2) For each league involved, order its seasons (newest first) so we can pick the + // current season plus up to `seasonsBack` previous ones for every reported match. + var leagueIds = dayMatches.Select(m => m.LeagueId).Distinct().ToList(); + var leagueSeasons = await _db.Seasons.AsNoTracking() + .Where(s => leagueIds.Contains(s.LeagueId)) + .Select(s => new { s.SeasonId, s.LeagueId, s.StartDate, s.Name }) + .ToListAsync(ct); + var seasonsByLeague = leagueSeasons + .GroupBy(s => s.LeagueId) + .ToDictionary(g => g.Key, g => g.OrderByDescending(x => x.StartDate).ToList()); + + // Per reported match: the set of allowed season ids and their names (oldest -> newest). + var allowedByMatch = new Dictionary>(); + var namesByMatch = new Dictionary>(); + foreach (var m in dayMatches) + { + var ordered = seasonsByLeague.TryGetValue(m.LeagueId, out var os) ? os : new(); + var idx = ordered.FindIndex(x => x.SeasonId == m.SeasonId); + var window = idx < 0 + ? ordered.Where(x => x.SeasonId == m.SeasonId).ToList() + : ordered.Skip(idx).Take(seasonsBack + 1).ToList(); + if (window.Count == 0) + window = new() { new { SeasonId = m.SeasonId, LeagueId = m.LeagueId, StartDate = default(DateOnly), Name = m.SeasonName } }; + + allowedByMatch[m.MatchId] = window.Select(x => x.SeasonId).ToHashSet(); + namesByMatch[m.MatchId] = window.OrderBy(x => x.StartDate).Select(x => x.Name).ToList(); + } + + var seasonIds = allowedByMatch.Values.SelectMany(x => x).Distinct().ToList(); + + // 3) Load history for every relevant season in a few set-based queries (everything strictly + // before the latest reported kickoff; per-match season/before filtering happens in memory). + var seasonMatches = await _db.Matches + .AsNoTracking() + .Where(m => seasonIds.Contains(m.Matchday.SeasonId) && m.KickoffAt < maxKickoff) + .Select(m => new SeasonMatchRow( + m.Matchday.SeasonId, m.MatchId, m.KickoffAt, m.HomeTeamId, m.AwayTeamId, + m.HomeTeam.Name, m.AwayTeam.Name, m.Status, m.HomeScoreFt, m.AwayScoreFt)) + .ToListAsync(ct); + + var seasonStats = await _db.MatchTeamStats + .AsNoTracking() + .Where(s => seasonIds.Contains(s.Match.Matchday.SeasonId) && s.Match.KickoffAt < maxKickoff) + .Select(s => new SeasonStatRow( + s.Match.Matchday.SeasonId, s.MatchId, s.TeamId, s.Match.KickoffAt, + s.PossessionPct, s.ShotsTotal, s.ShotsOnTarget, s.Corners, s.Fouls, + s.Offsides, s.YellowCards, s.RedCards)) + .ToListAsync(ct); + + var seasonGoals = await _db.MatchGoals + .AsNoTracking() + .Where(g => seasonIds.Contains(g.Match.Matchday.SeasonId) && g.Match.KickoffAt < maxKickoff) + .Select(g => new SeasonGoalRow( + g.Match.Matchday.SeasonId, g.MatchId, g.TeamId, g.Match.KickoffAt, + g.PlayerId, g.Player.FullName, g.AssistPlayerId, + g.AssistPlayer != null ? g.AssistPlayer.FullName : null)) + .ToListAsync(ct); + + // 3b) Stored model predictions (bookie.match_prediction) for the day's matches, keyed by (match, team). + var dayMatchIds = dayMatches.Select(m => m.MatchId).ToList(); + var predictionByKey = new Dictionary<(int, int), MatchTeamPredictionDto>(); + try + { + var preds = await _db.MatchPredictions.AsNoTracking() + .Where(p => dayMatchIds.Contains(p.MatchId)) + .ToListAsync(ct); + foreach (var p in preds) + { + predictionByKey[(p.MatchId, p.TeamId)] = new MatchTeamPredictionDto + { + PredictedGoals = p.PredictedGoals, + PredictedShotsTotal = p.PredictedShotsTotal, + PredictedShotsOnTarget = p.PredictedShotsOnTarget, + PredictedCorners = p.PredictedCorners, + PredictedFouls = p.PredictedFouls, + PredictedYellowCards = p.PredictedYellowCards, + ModelTrainedAt = p.ModelTrainedAt, + HalfLifeDays = p.HalfLifeDays, + PredictedAt = p.PredictedAt, + }; + } + } + catch + { + // match_prediction table may be absent in some environments — degrade gracefully. + } + + // 3c) Latest OpenAI predictions (bookie.match_prediction_openai) per (match, team). + var openAiByKey = new Dictionary<(int, int), MatchTeamOpenAiPredictionDto>(); + try + { + var openAiRows = await _db.MatchPredictionOpenAis.AsNoTracking() + .Where(p => dayMatchIds.Contains(p.MatchId)) + .OrderByDescending(p => p.PredictedAt) + .ToListAsync(ct); + foreach (var p in openAiRows) + { + var key = (p.MatchId, p.TeamId); + if (openAiByKey.ContainsKey(key)) + continue; + openAiByKey[key] = new MatchTeamOpenAiPredictionDto + { + PredictedGoals = p.PredictedGoals, + PredictedShotsOnTarget = p.PredictedShotsOnTarget, + PredictedCorners = p.PredictedCorners, + PredictedFouls = p.PredictedFouls, + PredictedYellowCards = p.PredictedYellowCards, + PredictedRedCards = p.PredictedRedCards, + Confidence = p.Confidence, + Model = p.Model, + PredictedAt = p.PredictedAt, + }; + } + } + catch + { + // match_prediction_openai table may not exist yet — run sql/match_prediction_openai.sql. + } + + // 3d) Actual per-team stats for finished matches on this day. + var actualByKey = new Dictionary<(int, int), MatchTeamActualDto>(); + var finishedMatchIds = dayMatches.Where(m => m.Status == "finished").Select(m => m.MatchId).ToList(); + if (finishedMatchIds.Count > 0) + { + var statRows = await _db.MatchTeamStats.AsNoTracking() + .Where(s => finishedMatchIds.Contains(s.MatchId)) + .Select(s => new + { + s.MatchId, + s.TeamId, + s.ShotsTotal, + s.ShotsOnTarget, + s.Corners, + s.Fouls, + s.YellowCards, + s.RedCards, + }) + .ToListAsync(ct); + foreach (var s in statRows) + { + actualByKey[(s.MatchId, s.TeamId)] = new MatchTeamActualDto + { + ShotsTotal = s.ShotsTotal, + ShotsOnTarget = s.ShotsOnTarget, + Corners = s.Corners, + Fouls = s.Fouls, + YellowCards = s.YellowCards, + RedCards = s.RedCards, + }; + } + } + + // 3e) League model params, team strengths, odds, aliases (optional tables). + var leagueModelById = new Dictionary(); + var strengthByKey = new Dictionary<(int TeamId, int LeagueId), TeamStrengthDto>(); + var oddsByMatchId = new Dictionary(); + var extraOddsByMatchId = new Dictionary>(); + var oddsAliasByTeamId = new Dictionary(); + + try + { + var leagueParams = await _db.LeagueModelParams.AsNoTracking() + .Where(p => leagueIds.Contains(p.LeagueId)) + .ToListAsync(ct); + foreach (var p in leagueParams) + { + leagueModelById[p.LeagueId] = new LeagueModelParamDto + { + HomeAdvantage = p.HomeAdvantage, + Rho = p.Rho, + AvgHomeGoals = p.AvgHomeGoals, + AvgAwayGoals = p.AvgAwayGoals, + MatchesUsed = p.MatchesUsed, + HalfLifeDays = p.HalfLifeDays, + TrainedAt = p.TrainedAt, + }; + } + + var teamIds = dayMatches + .SelectMany(m => new[] { m.HomeTeamId, m.AwayTeamId }) + .Distinct() + .ToList(); + var strengths = await _db.TeamStrengths.AsNoTracking() + .Where(s => leagueIds.Contains(s.LeagueId) && teamIds.Contains(s.TeamId)) + .ToListAsync(ct); + foreach (var s in strengths) + { + strengthByKey[(s.TeamId, s.LeagueId)] = new TeamStrengthDto + { + LogAttack = s.LogAttack, + LogDefense = s.LogDefense, + AttackFactor = Round((decimal)Math.Exp((double)s.LogAttack), 4), + DefenseFactor = Round((decimal)Math.Exp((double)s.LogDefense), 4), + MatchesUsed = s.MatchesUsed, + TrainedAt = s.TrainedAt, + }; + } + + var oddsRows = await _db.MatchOdds.AsNoTracking() + .Where(o => dayMatchIds.Contains(o.MatchId)) + .ToListAsync(ct); + foreach (var g in oddsRows.GroupBy(o => o.MatchId)) + { + var rows = g.ToList(); + if (rows.Count == 0) continue; + var avgHome = rows.Average(x => x.HomeOdds); + var avgDraw = rows.Average(x => x.DrawOdds); + var avgAway = rows.Average(x => x.AwayOdds); + + var totalLines = rows.Where(x => x.TotalLine.HasValue).Select(x => x.TotalLine!.Value).ToList(); + var overs = rows.Where(x => x.OverOdds.HasValue).Select(x => x.OverOdds!.Value).ToList(); + var unders = rows.Where(x => x.UnderOdds.HasValue).Select(x => x.UnderOdds!.Value).ToList(); + decimal? avgOver = overs.Count > 0 ? Round(overs.Average(), 3) : null; + decimal? avgUnder = unders.Count > 0 ? Round(unders.Average(), 3) : null; + + oddsByMatchId[g.Key] = new MatchOddsSummaryDto + { + BookmakerCount = rows.Count, + AvgHomeOdds = Round(avgHome, 3), + AvgDrawOdds = Round(avgDraw, 3), + AvgAwayOdds = Round(avgAway, 3), + HomeImplied = Round(1m / avgHome, 4), + DrawImplied = Round(1m / avgDraw, 4), + AwayImplied = Round(1m / avgAway, 4), + AvgTotalLine = totalLines.Count > 0 ? Round(totalLines.Average(), 2) : null, + AvgOverOdds = avgOver, + AvgUnderOdds = avgUnder, + OverImplied = avgOver is > 0 ? Round(1m / avgOver.Value, 4) : null, + UnderImplied = avgUnder is > 0 ? Round(1m / avgUnder.Value, 4) : null, + TotalsBookmakerCount = Math.Max(totalLines.Count, Math.Max(overs.Count, unders.Count)), + LatestFetchedAt = rows.Max(x => x.FetchedAt), + }; + } + + var extraRows = await _db.MatchExtraOdds.AsNoTracking() + .Where(o => dayMatchIds.Contains(o.MatchId)) + .OrderBy(o => o.Market).ThenBy(o => o.Bookmaker) + .ToListAsync(ct); + foreach (var o in extraRows) + { + if (!extraOddsByMatchId.TryGetValue(o.MatchId, out var list)) + { + list = new List(); + extraOddsByMatchId[o.MatchId] = list; + } + list.Add(new MatchExtraOddsDto + { + Market = o.Market, + Bookmaker = o.Bookmaker, + Line = o.Line, + OverOdds = o.OverOdds, + UnderOdds = o.UnderOdds, + FetchedAt = o.FetchedAt, + }); + } + + var aliases = await _db.TeamOddsAliases.AsNoTracking() + .Where(a => teamIds.Contains(a.TeamId)) + .ToListAsync(ct); + foreach (var a in aliases) + oddsAliasByTeamId[a.TeamId] = a.OddsApiName; + } + catch + { + // model/odds tables may not exist in this environment yet. + } + + // 4) Group by league/country/season, preserving the ordered layout. + var groups = new List(); + LeagueGroupDto? current = null; + + foreach (var m in dayMatches) + { + if (current == null || current.LeagueId != m.LeagueId || current.SeasonId != m.SeasonId) + { + current = new LeagueGroupDto + { + LeagueId = m.LeagueId, + LeagueName = m.LeagueName, + Country = m.Country, + SeasonId = m.SeasonId, + SeasonName = m.SeasonName, + ModelParams = leagueModelById.GetValueOrDefault(m.LeagueId), + }; + groups.Add(current); + } + + var allowed = allowedByMatch[m.MatchId]; + + var report = new MatchReportDto + { + MatchId = m.MatchId, + KickoffAt = m.KickoffAt, + Status = m.Status, + Stadium = m.Stadium, + Referee = m.Referee, + HomeTeamId = m.HomeTeamId, + HomeTeamName = m.HomeTeamName, + AwayTeamId = m.AwayTeamId, + AwayTeamName = m.AwayTeamName, + HomeScoreHt = m.HomeScoreHt, + AwayScoreHt = m.AwayScoreHt, + HomeScoreFt = m.HomeScoreFt, + AwayScoreFt = m.AwayScoreFt, + SeasonsIncluded = namesByMatch[m.MatchId], + Home = BuildTeamReport(m.HomeTeamId, m.HomeTeamName, allowed, m.MatchId, m.KickoffAt, seasonMatches, seasonStats, seasonGoals), + Away = BuildTeamReport(m.AwayTeamId, m.AwayTeamName, allowed, m.MatchId, m.KickoffAt, seasonMatches, seasonStats, seasonGoals) + }; + + report.Home.Prediction = predictionByKey.GetValueOrDefault((m.MatchId, m.HomeTeamId)); + report.Away.Prediction = predictionByKey.GetValueOrDefault((m.MatchId, m.AwayTeamId)); + report.Home.OpenAiPrediction = openAiByKey.GetValueOrDefault((m.MatchId, m.HomeTeamId)); + report.Away.OpenAiPrediction = openAiByKey.GetValueOrDefault((m.MatchId, m.AwayTeamId)); + report.Home.Actual = BuildActual(m.MatchId, m.HomeTeamId, m.HomeScoreFt, actualByKey); + report.Away.Actual = BuildActual(m.MatchId, m.AwayTeamId, m.AwayScoreFt, actualByKey); + report.Home.Strength = strengthByKey.GetValueOrDefault((m.HomeTeamId, m.LeagueId)); + report.Away.Strength = strengthByKey.GetValueOrDefault((m.AwayTeamId, m.LeagueId)); + report.Home.OddsApiName = oddsAliasByTeamId.GetValueOrDefault(m.HomeTeamId); + report.Away.OddsApiName = oddsAliasByTeamId.GetValueOrDefault(m.AwayTeamId); + report.Odds = oddsByMatchId.GetValueOrDefault(m.MatchId); + report.ExtraOdds = extraOddsByMatchId.GetValueOrDefault(m.MatchId) ?? new List(); + + current.Matches.Add(report); + } + + result.Groups = groups; + return result; + } + + public async Task GetHeadToHeadAsync( + int teamAId, int teamBId, int? beforeMatchId, CancellationToken ct = default) + { + var teamNames = await _db.Teams.AsNoTracking() + .Where(t => t.TeamId == teamAId || t.TeamId == teamBId) + .Select(t => new { t.TeamId, t.Name }) + .ToListAsync(ct); + if (teamNames.Count < 2 && teamAId != teamBId) + return null; + + var dto = new HeadToHeadDto + { + TeamAId = teamAId, + TeamAName = teamNames.FirstOrDefault(t => t.TeamId == teamAId)?.Name ?? "", + TeamBId = teamBId, + TeamBName = teamNames.FirstOrDefault(t => t.TeamId == teamBId)?.Name ?? "", + }; + + DateTime? before = null; + if (beforeMatchId is int refId) + { + before = await _db.Matches.AsNoTracking() + .Where(m => m.MatchId == refId).Select(m => (DateTime?)m.KickoffAt).FirstOrDefaultAsync(ct); + } + + var query = _db.Matches.AsNoTracking().Where(m => + m.Status == "finished" + && ((m.HomeTeamId == teamAId && m.AwayTeamId == teamBId) + || (m.HomeTeamId == teamBId && m.AwayTeamId == teamAId))); + + if (beforeMatchId is int exclude) + query = query.Where(m => m.MatchId != exclude); + if (before is DateTime b) + query = query.Where(m => m.KickoffAt < b); + + dto.Meetings = await query + .OrderByDescending(m => m.KickoffAt) + .Select(m => new HeadToHeadMatchDto + { + MatchId = m.MatchId, + KickoffAt = m.KickoffAt, + Status = m.Status, + LeagueName = m.Matchday.Season.League.Name, + Country = m.Matchday.Season.League.Country, + SeasonName = m.Matchday.Season.Name, + HomeTeamId = m.HomeTeamId, + HomeTeamName = m.HomeTeam.Name, + AwayTeamId = m.AwayTeamId, + AwayTeamName = m.AwayTeam.Name, + HomeScoreFt = m.HomeScoreFt, + AwayScoreFt = m.AwayScoreFt, + }) + .ToListAsync(ct); + + foreach (var g in dto.Meetings) + { + if (g.HomeScoreFt is null || g.AwayScoreFt is null) continue; + var aIsHome = g.HomeTeamId == teamAId; + var aGoals = aIsHome ? g.HomeScoreFt.Value : g.AwayScoreFt.Value; + var bGoals = aIsHome ? g.AwayScoreFt.Value : g.HomeScoreFt.Value; + dto.TeamAGoals += aGoals; + dto.TeamBGoals += bGoals; + if (aGoals > bGoals) dto.TeamAWins++; + else if (aGoals < bGoals) dto.TeamBWins++; + else dto.Draws++; + } + dto.TotalMeetings = dto.Meetings.Count; + + return dto; + } + + public async Task GetMatchDetailsAsync(int matchId, CancellationToken ct = default) + { + var dto = await _db.Matches.AsNoTracking() + .Where(m => m.MatchId == matchId) + .Select(m => new MatchDetailsDto + { + MatchId = m.MatchId, + KickoffAt = m.KickoffAt, + Status = m.Status, + Stadium = m.Stadium, + Referee = m.Referee, + LeagueName = m.Matchday.Season.League.Name, + Country = m.Matchday.Season.League.Country, + SeasonName = m.Matchday.Season.Name, + MatchdayNumber = m.Matchday.Number, + HomeTeamId = m.HomeTeamId, + HomeTeamName = m.HomeTeam.Name, + AwayTeamId = m.AwayTeamId, + AwayTeamName = m.AwayTeam.Name, + HomeScoreHt = m.HomeScoreHt, + AwayScoreHt = m.AwayScoreHt, + HomeScoreFt = m.HomeScoreFt, + AwayScoreFt = m.AwayScoreFt, + }) + .FirstOrDefaultAsync(ct); + + if (dto is null) + return null; + + var stats = await _db.MatchTeamStats.AsNoTracking() + .Where(s => s.MatchId == matchId) + .Select(s => new { s.TeamId, Dto = new TeamMatchStatsDto + { + PossessionPct = s.PossessionPct, + ShotsTotal = s.ShotsTotal, + ShotsOnTarget = s.ShotsOnTarget, + Corners = s.Corners, + Fouls = s.Fouls, + Offsides = s.Offsides, + YellowCards = s.YellowCards, + RedCards = s.RedCards, + } }) + .ToListAsync(ct); + + dto.HomeStats = stats.FirstOrDefault(x => x.TeamId == dto.HomeTeamId)?.Dto; + dto.AwayStats = stats.FirstOrDefault(x => x.TeamId == dto.AwayTeamId)?.Dto; + + var predictions = await _db.MatchPredictions.AsNoTracking() + .Where(p => p.MatchId == matchId) + .Select(p => new { p.TeamId, Dto = new MatchTeamPredictionDto + { + PredictedGoals = p.PredictedGoals, + PredictedShotsTotal = p.PredictedShotsTotal, + PredictedShotsOnTarget = p.PredictedShotsOnTarget, + PredictedCorners = p.PredictedCorners, + PredictedFouls = p.PredictedFouls, + PredictedYellowCards = p.PredictedYellowCards, + ModelTrainedAt = p.ModelTrainedAt, + HalfLifeDays = p.HalfLifeDays, + PredictedAt = p.PredictedAt, + } }) + .ToListAsync(ct); + + dto.HomePrediction = predictions.FirstOrDefault(x => x.TeamId == dto.HomeTeamId)?.Dto; + dto.AwayPrediction = predictions.FirstOrDefault(x => x.TeamId == dto.AwayTeamId)?.Dto; + + try + { + var openAi = await _db.MatchPredictionOpenAis.AsNoTracking() + .Where(p => p.MatchId == matchId) + .OrderByDescending(p => p.PredictedAt) + .ToListAsync(ct); + + MatchTeamOpenAiPredictionDto? LatestFor(int teamId) + { + var p = openAi.FirstOrDefault(x => x.TeamId == teamId); + return p is null ? null : new MatchTeamOpenAiPredictionDto + { + PredictedGoals = p.PredictedGoals, + PredictedShotsOnTarget = p.PredictedShotsOnTarget, + PredictedCorners = p.PredictedCorners, + PredictedFouls = p.PredictedFouls, + PredictedYellowCards = p.PredictedYellowCards, + PredictedRedCards = p.PredictedRedCards, + Confidence = p.Confidence, + Model = p.Model, + PredictedAt = p.PredictedAt, + }; + } + + dto.HomeOpenAiPrediction = LatestFor(dto.HomeTeamId); + dto.AwayOpenAiPrediction = LatestFor(dto.AwayTeamId); + } + catch + { + // match_prediction_openai table may not exist yet — degrade gracefully. + } + + dto.Goals = await _db.MatchGoals.AsNoTracking() + .Where(g => g.MatchId == matchId) + .OrderBy(g => g.Minute).ThenBy(g => g.AddedTime) + .Select(g => new GoalDetailDto + { + TeamId = g.TeamId, + IsHome = g.TeamId == dto.HomeTeamId, + ScorerName = g.Player.FullName, + AssistName = g.AssistPlayer != null ? g.AssistPlayer.FullName : null, + Minute = g.Minute, + AddedTime = g.AddedTime, + GoalType = g.GoalType, + }) + .ToListAsync(ct); + + dto.Cards = await _db.MatchCards.AsNoTracking() + .Where(c => c.MatchId == matchId) + .OrderBy(c => c.Minute) + .Select(c => new CardDetailDto + { + TeamId = c.TeamId, + IsHome = c.TeamId == dto.HomeTeamId, + PlayerName = c.Player.FullName, + Minute = c.Minute, + CardType = c.CardType, + Reason = c.Reason, + }) + .ToListAsync(ct); + + dto.Penalties = await _db.MatchPenalties.AsNoTracking() + .Where(p => p.MatchId == matchId) + .OrderBy(p => p.Minute) + .Select(p => new PenaltyDetailDto + { + TeamId = p.TeamId, + IsHome = p.TeamId == dto.HomeTeamId, + PlayerName = p.Player != null ? p.Player.FullName : null, + Minute = p.Minute, + Result = p.Result, + }) + .ToListAsync(ct); + + return dto; + } + + private static MatchTeamActualDto? BuildActual( + int matchId, int teamId, short? goalsFt, + Dictionary<(int, int), MatchTeamActualDto> byKey) + { + byKey.TryGetValue((matchId, teamId), out var stats); + var goals = goalsFt.HasValue ? (int?)goalsFt.Value : null; + if (stats is null && goals is null) + return null; + + var dto = stats is null + ? new MatchTeamActualDto() + : new MatchTeamActualDto + { + ShotsTotal = stats.ShotsTotal, + ShotsOnTarget = stats.ShotsOnTarget, + Corners = stats.Corners, + Fouls = stats.Fouls, + YellowCards = stats.YellowCards, + RedCards = stats.RedCards, + }; + dto.Goals = goals; + return dto.HasData ? dto : null; + } + + private static TeamReportDto BuildTeamReport( + int teamId, string teamName, HashSet seasonIds, int excludeMatchId, DateTime before, + List matches, List stats, List goals) + { + var report = new TeamReportDto { TeamId = teamId, TeamName = teamName }; + + report.GoalsForAgainst = BuildGoals(teamId, seasonIds, excludeMatchId, before, matches); + report.SeasonAverages = BuildAverages(teamId, seasonIds, excludeMatchId, before, stats); + report.Form = BuildForm(teamId, seasonIds, excludeMatchId, before, matches); + report.TopScorers = BuildTopScorers(teamId, seasonIds, excludeMatchId, before, goals); + + report.MatchesPlayed = report.GoalsForAgainst.MatchesPlayed; + report.HasHistory = report.GoalsForAgainst.MatchesPlayed > 0 + || report.SeasonAverages.MatchesPlayed > 0 + || report.Form.Count > 0 + || report.TopScorers.Count > 0; + return report; + } + + private static GoalsForAgainstDto BuildGoals( + int teamId, HashSet seasonIds, int excludeMatchId, DateTime before, List matches) + { + var finished = matches.Where(x => + seasonIds.Contains(x.SeasonId) + && x.Status == "finished" + && (x.HomeTeamId == teamId || x.AwayTeamId == teamId) + && x.MatchId != excludeMatchId + && x.KickoffAt < before).ToList(); + + var dto = new GoalsForAgainstDto { MatchesPlayed = finished.Count }; + if (finished.Count == 0) + return dto; + + var forVals = finished + .Select(x => x.HomeTeamId == teamId ? x.HomeScoreFt : x.AwayScoreFt) + .Where(v => v.HasValue).Select(v => (decimal)v!.Value).ToList(); + var againstVals = finished + .Select(x => x.HomeTeamId == teamId ? x.AwayScoreFt : x.HomeScoreFt) + .Where(v => v.HasValue).Select(v => (decimal)v!.Value).ToList(); + + dto.AvgGoalsFor = forVals.Count > 0 ? Round(forVals.Average(), 2) : null; + dto.AvgGoalsAgainst = againstVals.Count > 0 ? Round(againstVals.Average(), 2) : null; + return dto; + } + + private static SeasonAveragesDto BuildAverages( + int teamId, HashSet seasonIds, int excludeMatchId, DateTime before, List stats) + { + var rows = stats.Where(x => + seasonIds.Contains(x.SeasonId) + && x.TeamId == teamId + && x.MatchId != excludeMatchId + && x.KickoffAt < before).ToList(); + + var dto = new SeasonAveragesDto { MatchesPlayed = rows.Count }; + if (rows.Count == 0) + return dto; + + dto.Possession = AvgDecimal(rows.Select(x => x.PossessionPct), 1); + dto.ShotsTotal = AvgShort(rows.Select(x => x.ShotsTotal), 1); + dto.ShotsOnTarget = AvgShort(rows.Select(x => x.ShotsOnTarget), 1); + dto.Corners = AvgShort(rows.Select(x => x.Corners), 1); + dto.Fouls = AvgShort(rows.Select(x => x.Fouls), 1); + dto.Offsides = AvgShort(rows.Select(x => x.Offsides), 1); + dto.YellowCards = AvgShort(rows.Select(x => (short?)x.YellowCards), 2); + dto.RedCards = AvgShort(rows.Select(x => (short?)x.RedCards), 2); + return dto; + } + + private static List BuildForm( + int teamId, HashSet seasonIds, int excludeMatchId, DateTime before, List matches) + { + // Last 5 finished matches before this one, most-recent-first, then reversed to chronological. + var last5 = matches.Where(x => + seasonIds.Contains(x.SeasonId) + && (x.HomeTeamId == teamId || x.AwayTeamId == teamId) + && x.Status == "finished" + && x.MatchId != excludeMatchId + && x.KickoffAt < before) + .OrderByDescending(x => x.KickoffAt) + .Take(5) + .ToList(); + + var form = new List(); + foreach (var r in Enumerable.Reverse(last5)) + { + var isHome = r.HomeTeamId == teamId; + var gf = isHome ? r.HomeScoreFt : r.AwayScoreFt; + var ga = isHome ? r.AwayScoreFt : r.HomeScoreFt; + if (gf is null || ga is null) continue; + form.Add(new FormResultDto + { + Result = gf > ga ? "W" : gf < ga ? "L" : "D", + MatchId = r.MatchId, + KickoffAt = r.KickoffAt, + OpponentName = isHome ? r.AwayTeamName : r.HomeTeamName, + IsHome = isHome, + GoalsFor = gf.Value, + GoalsAgainst = ga.Value, + }); + } + return form; + } + + private static List BuildTopScorers( + int teamId, HashSet seasonIds, int excludeMatchId, DateTime before, List goals) + { + var relevant = goals.Where(g => + seasonIds.Contains(g.SeasonId) + && g.TeamId == teamId + && g.MatchId != excludeMatchId + && g.KickoffAt < before).ToList(); + + // Group by player name (mirrors GROUP BY p.full_name). A player counts as a goal for + // each goal scored and an assist for each goal assisted, for this team. + var acc = new Dictionary(); + + TopScorerDto Get(string name) + { + if (!acc.TryGetValue(name, out var s)) + { + s = new TopScorerDto { PlayerName = name }; + acc[name] = s; + } + return s; + } + + foreach (var g in relevant) + { + Get(g.ScorerName).Goals++; + if (g.AssistPlayerId.HasValue && g.AssistName is not null) + Get(g.AssistName).Assists++; + } + + return acc.Values + .OrderByDescending(s => s.Goals) + .ThenByDescending(s => s.Assists) + .ThenBy(s => s.PlayerName) + .Take(5) + .ToList(); + } + + private static decimal? AvgShort(IEnumerable values, int digits) + { + var vals = values.Where(v => v.HasValue).Select(v => (decimal)v!.Value).ToList(); + return vals.Count > 0 ? Round(vals.Average(), digits) : null; + } + + private static decimal? AvgDecimal(IEnumerable values, int digits) + { + var vals = values.Where(v => v.HasValue).Select(v => v!.Value).ToList(); + return vals.Count > 0 ? Round(vals.Average(), digits) : null; + } + + // PostgreSQL ROUND(numeric) rounds halves away from zero; match that here. + private static decimal Round(decimal value, int digits) => + Math.Round(value, digits, MidpointRounding.AwayFromZero); + + private readonly record struct SeasonMatchRow( + int SeasonId, int MatchId, DateTime KickoffAt, int HomeTeamId, int AwayTeamId, + string HomeTeamName, string AwayTeamName, string Status, short? HomeScoreFt, short? AwayScoreFt); + + private readonly record struct SeasonStatRow( + int SeasonId, int MatchId, int TeamId, DateTime KickoffAt, + decimal? PossessionPct, short? ShotsTotal, short? ShotsOnTarget, short? Corners, + short? Fouls, short? Offsides, short YellowCards, short RedCards); + + private readonly record struct SeasonGoalRow( + int SeasonId, int MatchId, int TeamId, DateTime KickoffAt, + int PlayerId, string ScorerName, int? AssistPlayerId, string? AssistName); +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/PredictionService.cs b/BookieApi/src/Bookie.Infrastructure/Services/PredictionService.cs new file mode 100644 index 0000000..7b3dc84 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/PredictionService.cs @@ -0,0 +1,480 @@ +using System.Net.Http.Headers; +using System.Net.Http.Json; +using System.Text.Json; +using System.Text.Json.Serialization; +using Bookie.Application.DTOs.Predictions; +using Bookie.Application.Interfaces; +using Bookie.Domain.Entities; +using Bookie.Infrastructure.Persistence; +using Bookie.Infrastructure.Predictions; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; + +namespace Bookie.Infrastructure.Services; + +/// +/// Gathers structured historical data (season overall + venue splits, recent form, +/// head-to-head) for a fixture and asks an OpenAI model to project match events. +/// +public class PredictionService : IPredictionService +{ + private readonly BookieDbContext _db; + private readonly HttpClient _http; + private readonly OpenAiOptions _options; + + private static readonly JsonSerializerOptions ParseOptions = new() + { + PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower, + NumberHandling = JsonNumberHandling.AllowReadingFromString, + PropertyNameCaseInsensitive = true, + }; + + public PredictionService(BookieDbContext db, HttpClient http, IOptions options) + { + _db = db; + _http = http; + _options = options.Value; + } + + public async Task PredictMatchAsync(int matchId, CancellationToken ct = default) + { + var results = await PredictMatchesAsync(new[] { matchId }, ct); + return results.FirstOrDefault(); + } + + public async Task> PredictMatchesAsync( + IReadOnlyList matchIds, CancellationToken ct = default) + { + var distinctIds = matchIds.Distinct().ToList(); + + var headers = new List(); + var blocks = new List(); + foreach (var id in distinctIds) + { + var gathered = await GatherMatchAsync(id, ct); + if (gathered is null) + continue; + headers.Add(gathered.Value.Header); + blocks.Add(gathered.Value.Payload); + } + + if (headers.Count == 0) + return new List(); + + var payload = new + { + matchday_date = DateOnly.FromDateTime(headers.Min(h => h.KickoffAt)).ToString("yyyy-MM-dd"), + matches = blocks, + }; + var userJson = JsonSerializer.Serialize(payload, new JsonSerializerOptions { WriteIndented = true }); + + var predictions = await CallOpenAiAsync(userJson, ct); + + // Trust the database for each fixture header, matching the model's output back by match id + // (falling back to positional alignment if the model didn't echo ids reliably). + var byId = predictions.Where(p => p.MatchId != 0) + .GroupBy(p => p.MatchId).ToDictionary(g => g.Key, g => g.First()); + var ordered = new List(); + for (var i = 0; i < headers.Count; i++) + { + var h = headers[i]; + var p = byId.GetValueOrDefault(h.MatchId) + ?? (predictions.Count == headers.Count ? predictions[i] : null); + if (p is null) + continue; + + p.MatchId = h.MatchId; + p.HomeTeam = h.HomeTeam; + p.AwayTeam = h.AwayTeam; + p.League = h.League; + p.Country = h.Country; + p.KickoffAt = h.KickoffAt; + p.Model = _options.Model; + ordered.Add(p); + } + + await PersistAsync(ordered, ct); + return ordered; + } + + /// + /// Saves each produced prediction into bookie.match_prediction_openai (one row per team, + /// history kept). Failures here (e.g. the table hasn't been created yet) must not break the + /// prediction response, so they are swallowed. + /// + private async Task PersistAsync(List predictions, CancellationToken ct) + { + if (predictions.Count == 0) + return; + try + { + var ids = predictions.Select(p => p.MatchId).Distinct().ToList(); + var teams = await _db.Matches.AsNoTracking() + .Where(m => ids.Contains(m.MatchId)) + .Select(m => new { m.MatchId, m.HomeTeamId, m.AwayTeamId }) + .ToDictionaryAsync(m => m.MatchId, ct); + + var now = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Unspecified); + foreach (var p in predictions) + { + if (!teams.TryGetValue(p.MatchId, out var t)) + continue; + _db.MatchPredictionOpenAis.Add(Row(p.MatchId, t.HomeTeamId, p.Home, p, now)); + _db.MatchPredictionOpenAis.Add(Row(p.MatchId, t.AwayTeamId, p.Away, p, now)); + } + await _db.SaveChangesAsync(ct); + } + catch + { + // Table may not exist yet (run sql/match_prediction_openai.sql) — ignore persistence errors. + } + } + + private static MatchPredictionOpenAi Row( + int matchId, int teamId, TeamPredictionDto team, MatchPredictionDto p, DateTime now) + { + static decimal D(double v) => (decimal)Math.Round(v, 2); + return new MatchPredictionOpenAi + { + MatchId = matchId, + TeamId = teamId, + PredictedGoals = D(team.Goals.Estimate), GoalsLow = D(team.Goals.Low), GoalsHigh = D(team.Goals.High), + PredictedShotsOnTarget = D(team.ShotsOnTarget.Estimate), ShotsOnTargetLow = D(team.ShotsOnTarget.Low), ShotsOnTargetHigh = D(team.ShotsOnTarget.High), + PredictedCorners = D(team.Corners.Estimate), CornersLow = D(team.Corners.Low), CornersHigh = D(team.Corners.High), + PredictedFouls = D(team.Fouls.Estimate), FoulsLow = D(team.Fouls.Low), FoulsHigh = D(team.Fouls.High), + PredictedYellowCards = D(team.YellowCards.Estimate), YellowCardsLow = D(team.YellowCards.Low), YellowCardsHigh = D(team.YellowCards.High), + PredictedRedCards = D(team.RedCards.Estimate), RedCardsLow = D(team.RedCards.Low), RedCardsHigh = D(team.RedCards.High), + Confidence = p.Confidence, + Reasoning = p.Reasoning, + Model = p.Model, + PredictedAt = now, + }; + } + + /// Loads the historical data block + fixture header for one match, or null if it doesn't exist. + private async Task<(MatchHeader Header, object Payload)?> GatherMatchAsync(int matchId, CancellationToken ct) + { + var match = await _db.Matches.AsNoTracking() + .Where(m => m.MatchId == matchId) + .Select(m => new + { + m.MatchId, + m.KickoffAt, + m.HomeTeamId, + HomeTeamName = m.HomeTeam.Name, + m.AwayTeamId, + AwayTeamName = m.AwayTeam.Name, + SeasonId = m.Matchday.SeasonId, + LeagueName = m.Matchday.Season.League.Name, + Country = m.Matchday.Season.League.Country, + }) + .FirstOrDefaultAsync(ct); + + if (match is null) + return null; + + var home = match.HomeTeamId; + var away = match.AwayTeamId; + + // Finished matches in the same season, before this kickoff, involving either team. + var hist = await _db.Matches.AsNoTracking() + .Where(m => m.Matchday.SeasonId == match.SeasonId + && m.KickoffAt < match.KickoffAt + && m.Status == "finished" + && (m.HomeTeamId == home || m.AwayTeamId == home + || m.HomeTeamId == away || m.AwayTeamId == away)) + .Select(m => new HistMatch( + m.MatchId, m.KickoffAt, m.HomeTeamId, m.AwayTeamId, + m.HomeTeam.Name, m.AwayTeam.Name, m.HomeScoreFt, m.AwayScoreFt)) + .ToListAsync(ct); + + var stats = await _db.MatchTeamStats.AsNoTracking() + .Where(s => s.Match.Matchday.SeasonId == match.SeasonId + && s.Match.KickoffAt < match.KickoffAt + && s.Match.Status == "finished" + && (s.TeamId == home || s.TeamId == away)) + .Select(s => new HistStat( + s.MatchId, s.TeamId, s.ShotsOnTarget, s.Corners, s.Fouls, + s.YellowCards, s.RedCards, s.PossessionPct)) + .ToListAsync(ct); + var statByKey = stats.ToDictionary(s => (s.MatchId, s.TeamId)); + + // Head-to-head across all seasons (finished, before this kickoff), most recent first. + var h2h = await _db.Matches.AsNoTracking() + .Where(m => m.Status == "finished" && m.KickoffAt < match.KickoffAt + && ((m.HomeTeamId == home && m.AwayTeamId == away) + || (m.HomeTeamId == away && m.AwayTeamId == home))) + .OrderByDescending(m => m.KickoffAt) + .Take(10) + .Select(m => new + { + date = m.KickoffAt.ToString("yyyy-MM-dd"), + home_team = m.HomeTeam.Name, + away_team = m.AwayTeam.Name, + home_score = m.HomeScoreFt, + away_score = m.AwayScoreFt, + league = m.Matchday.Season.League.Name, + }) + .ToListAsync(ct); + + var homePerf = BuildPerf(home, hist, statByKey); + var awayPerf = BuildPerf(away, hist, statByKey); + + var block = new + { + match_id = match.MatchId, + league = match.LeagueName, + country = match.Country, + kickoff_at = match.KickoffAt.ToString("yyyy-MM-dd HH:mm"), + home = TeamBlock(match.HomeTeamName, "home", homePerf), + away = TeamBlock(match.AwayTeamName, "away", awayPerf), + head_to_head = h2h, + }; + + var header = new MatchHeader( + match.MatchId, match.HomeTeamName, match.AwayTeamName, + match.LeagueName, match.Country, match.KickoffAt); + + return (header, block); + } + + private async Task> CallOpenAiAsync(string userJson, CancellationToken ct) + { + var apiKey = string.IsNullOrWhiteSpace(_options.ApiKey) + ? Environment.GetEnvironmentVariable("OPENAI_API_KEY") + : _options.ApiKey; + + if (string.IsNullOrWhiteSpace(apiKey)) + throw new InvalidOperationException( + "OpenAI API key is not configured. Set OpenAI:ApiKey in configuration or the OPENAI_API_KEY environment variable."); + + var requestBody = new Dictionary + { + ["model"] = _options.Model, + ["messages"] = new object[] + { + new { role = "system", content = SystemPrompt }, + new { role = "user", content = userJson }, + }, + ["response_format"] = new + { + type = "json_schema", + json_schema = new + { + name = "match_predictions", + strict = true, + schema = JsonSerializer.Deserialize(SchemaJson), + }, + }, + }; + + // Newer models (e.g. GPT-5.x) only accept the default temperature (1) and reject the + // parameter otherwise, so only send it when a non-default value is explicitly configured. + if (Math.Abs(_options.Temperature - 1.0) > 0.0001) + requestBody["temperature"] = _options.Temperature; + + using var req = new HttpRequestMessage(HttpMethod.Post, $"{_options.BaseUrl.TrimEnd('/')}/chat/completions"); + req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey); + req.Content = JsonContent.Create(requestBody); + + using var resp = await _http.SendAsync(req, ct); + var body = await resp.Content.ReadAsStringAsync(ct); + if (!resp.IsSuccessStatusCode) + throw new InvalidOperationException($"OpenAI request failed ({(int)resp.StatusCode}): {body}"); + + using var doc = JsonDocument.Parse(body); + var message = doc.RootElement.GetProperty("choices")[0].GetProperty("message"); + + if (message.TryGetProperty("refusal", out var refusal) + && refusal.ValueKind == JsonValueKind.String + && !string.IsNullOrEmpty(refusal.GetString())) + throw new InvalidOperationException("The model refused to produce a prediction: " + refusal.GetString()); + + var content = message.GetProperty("content").GetString() ?? "{}"; + var batch = JsonSerializer.Deserialize(content, ParseOptions); + return batch?.Predictions ?? new List(); + } + + private sealed class PredictionBatch + { + public List Predictions { get; set; } = new(); + } + + private readonly record struct MatchHeader( + int MatchId, string HomeTeam, string AwayTeam, string League, string? Country, DateTime KickoffAt); + + private static List BuildPerf( + int teamId, List hist, Dictionary<(int, int), HistStat> statByKey) + { + var list = new List(); + foreach (var m in hist + .Where(m => m.HomeTeamId == teamId || m.AwayTeamId == teamId) + .OrderBy(m => m.KickoffAt)) + { + var isHome = m.HomeTeamId == teamId; + var gf = isHome ? m.HomeScoreFt : m.AwayScoreFt; + var ga = isHome ? m.AwayScoreFt : m.HomeScoreFt; + statByKey.TryGetValue((m.MatchId, teamId), out var st); + var result = gf is null || ga is null ? "?" : gf > ga ? "W" : gf < ga ? "L" : "D"; + list.Add(new TeamPerf( + m.KickoffAt, + isHome ? "home" : "away", + isHome ? m.AwayTeamName : m.HomeTeamName, + gf, ga, + st.ShotsOnTarget, st.Corners, st.Fouls, st.YellowCards, st.RedCards, st.PossessionPct, + result)); + } + return list; + } + + private static object TeamBlock(string name, string venue, List perf) + { + return new + { + team_name = name, + venue, + season_overall = Season(perf), + season_home = venue == "home" ? Season(perf.Where(p => p.Venue == "home").ToList()) : null, + season_away = venue == "away" ? Season(perf.Where(p => p.Venue == "away").ToList()) : null, + recent_form = perf.TakeLast(5).Select(p => new + { + result = p.Result, + venue = p.Venue, + opponent = p.Opponent, + date = p.KickoffAt.ToString("yyyy-MM-dd"), + goals_for = p.GoalsFor, + goals_against = p.GoalsAgainst, + yellow_cards = (int?)p.YellowCards, + red_cards = (int?)p.RedCards, + fouls = (int?)p.Fouls, + corners = (int?)p.Corners, + shots_on_target = (int?)p.ShotsOnTarget, + }).ToArray(), + sample_size_warning = perf.Count < 5, + }; + } + + private static object? Season(List perf) + { + if (perf.Count == 0) + return null; + return new + { + matches_played = perf.Count, + avg_goals_for = Avg(perf.Select(p => (double?)p.GoalsFor)), + avg_goals_against = Avg(perf.Select(p => (double?)p.GoalsAgainst)), + avg_yellow_cards = Avg(perf.Select(p => (double?)p.YellowCards)), + avg_red_cards = Avg(perf.Select(p => (double?)p.RedCards)), + avg_fouls = Avg(perf.Select(p => (double?)p.Fouls)), + avg_corners = Avg(perf.Select(p => (double?)p.Corners)), + avg_shots_on_target = Avg(perf.Select(p => (double?)p.ShotsOnTarget)), + avg_possession = Avg(perf.Select(p => p.PossessionPct.HasValue ? (double?)p.PossessionPct.Value : null)), + }; + } + + private static double? Avg(IEnumerable values) + { + var vals = values.Where(v => v.HasValue).Select(v => v!.Value).ToList(); + return vals.Count > 0 ? Math.Round(vals.Average(), 2) : null; + } + + private readonly record struct HistMatch( + int MatchId, DateTime KickoffAt, int HomeTeamId, int AwayTeamId, + string HomeTeamName, string AwayTeamName, short? HomeScoreFt, short? AwayScoreFt); + + private readonly record struct HistStat( + int MatchId, int TeamId, short? ShotsOnTarget, short? Corners, short? Fouls, + short YellowCards, short RedCards, decimal? PossessionPct); + + private readonly record struct TeamPerf( + DateTime KickoffAt, string Venue, string Opponent, short? GoalsFor, short? GoalsAgainst, + short? ShotsOnTarget, short? Corners, short? Fouls, short YellowCards, short RedCards, + decimal? PossessionPct, string Result); + + private const string SystemPrompt = """ +You are a Football Match Statistics Predictor. For a given matchday, you receive a list of matches, each accompanied by structured historical data for both teams (pulled from a PostgreSQL database: overall season stats, home/away splits, recent form, and head-to-head history where available). Your job is to estimate, for each match and each team separately, the expected values for: goals scored, yellow cards, red cards, fouls committed, corners won, and shots on target. + +Input data you will receive per match, as a JSON block per team with (as available): +- team_name, venue ("home" or "away" for this specific match) +- season_overall: matches played, avg goals for/against, avg yellow/red cards, avg fouls, avg corners, avg shots on target, avg possession +- season_home (only relevant if venue == "home"): same metrics, but computed ONLY from this team's home matches this season +- season_away (only relevant if venue == "away"): same metrics, but computed ONLY from this team's away matches this season +- recent_form: last 5 results (W/D/L) plus the underlying goals/cards/corners/fouls from those specific matches, ordered oldest to newest +- head_to_head: results and stats from the last meetings between these two exact teams (may be empty if no historical meetings exist in the database) +- sample_size_warning: a flag indicating whether any of the above is based on fewer than 5 matches (small-sample data should be trusted less) + +If any field is missing or null, treat it as "not available" — do not invent numbers to fill gaps; instead widen your uncertainty and say so explicitly. + +Methodology you MUST follow: +1. Prioritize venue-specific splits over overall season averages. For the home team, weight season_home more heavily than season_overall. For the away team, weight season_away more heavily than season_overall. Only fall back fully to season_overall when the venue-specific sample is very small (fewer than 3 matches). +2. Blend in recent form as a trend adjustor, not a replacement. If recent_form shows a team scoring/conceding notably more or less than its season average, shift your estimate moderately in that direction — do not overreact to 1-2 outlier games. +3. Incorporate head-to-head history as a secondary signal. If head_to_head data exists, note any consistent patterns (e.g., historically high-scoring fixture, one side dominating, high card counts due to rivalry) and adjust your estimate slightly toward that pattern. If head-to-head sample is very small (1-2 meetings) or absent, state that it was not a meaningful factor and rely primarily on venue-specific and overall season data instead. +4. Regress toward the mean for small samples. If a team has played very few matches this season (or very few at this specific venue), blend their limited data with their season_overall figures and flag lower confidence. +5. Combine both teams' tendencies for a match-level sanity check. E.g., if the home team concedes few corners and the away team also wins few corners on the road, the combined corner count for the away team should trend low — cross-check your per-team numbers make sense together, not just in isolation. +6. Never fabricate statistics. If data for a given category (e.g., red cards) is sparse or all-zero across the sample, say the expected value is very low/near zero rather than inventing a plausible-sounding number. + +Output: return ONLY JSON that conforms to the provided json_schema. The top-level object has a "predictions" array containing ONE entry per match in the input "matches" list, in the SAME order, and each entry MUST echo the correct "match_id". For each team, populate goals, shots_on_target, corners, fouls, yellow_cards and red_cards, where each is an object with a point "estimate" plus a plausible "low"/"high" range. Put the 3-5 sentence explanation of the key drivers (venue split influence, recent form trend, head-to-head pattern or its absence, and any data-quality caveats) in "reasoning". Set "confidence" to High, Medium or Low based on how much reliable data supported the estimate. Use "flags" for explicit data-quality problems: small samples, missing categories, a team with zero historical matches, or a data error such as the same team appearing on both sides. + +Important constraints: +- These are statistical estimates for entertainment/analytical purposes, not guaranteed outcomes — do not use language implying certainty ("will score", "will win"). Use "expected", "likely to", "projected". +- Do not recommend betting action, stakes, or odds comparisons. Stick to statistical projection of match events (goals, cards, fouls, corners, shots). +- If a team has zero historical matches at all, flag this explicitly instead of guessing. +- Keep the tone analytical and concise — this is a data report, not commentary. +"""; + + private const string SchemaJson = """ +{ + "type": "object", + "additionalProperties": false, + "properties": { + "predictions": { + "type": "array", + "items": { "$ref": "#/$defs/prediction" } + } + }, + "required": ["predictions"], + "$defs": { + "metric": { + "type": "object", + "additionalProperties": false, + "properties": { + "estimate": { "type": "number" }, + "low": { "type": "number" }, + "high": { "type": "number" } + }, + "required": ["estimate", "low", "high"] + }, + "team": { + "type": "object", + "additionalProperties": false, + "properties": { + "goals": { "$ref": "#/$defs/metric" }, + "shots_on_target": { "$ref": "#/$defs/metric" }, + "corners": { "$ref": "#/$defs/metric" }, + "fouls": { "$ref": "#/$defs/metric" }, + "yellow_cards": { "$ref": "#/$defs/metric" }, + "red_cards": { "$ref": "#/$defs/metric" } + }, + "required": ["goals", "shots_on_target", "corners", "fouls", "yellow_cards", "red_cards"] + }, + "prediction": { + "type": "object", + "additionalProperties": false, + "properties": { + "match_id": { "type": "integer" }, + "home_team": { "type": "string" }, + "away_team": { "type": "string" }, + "league": { "type": "string" }, + "kickoff": { "type": "string" }, + "home": { "$ref": "#/$defs/team" }, + "away": { "$ref": "#/$defs/team" }, + "reasoning": { "type": "string" }, + "confidence": { "type": "string", "enum": ["High", "Medium", "Low"] }, + "flags": { "type": "array", "items": { "type": "string" } } + }, + "required": ["match_id", "home_team", "away_team", "league", "kickoff", "home", "away", "reasoning", "confidence", "flags"] + } + } +} +"""; +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/SeasonService.cs b/BookieApi/src/Bookie.Infrastructure/Services/SeasonService.cs new file mode 100644 index 0000000..bf3f7c9 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/SeasonService.cs @@ -0,0 +1,97 @@ +using Bookie.Application.DTOs.Common; +using Bookie.Application.DTOs.Seasons; +using Bookie.Application.Interfaces; +using Bookie.Domain.Entities; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +public class SeasonService : ISeasonService +{ + private readonly BookieDbContext _db; + public SeasonService(BookieDbContext db) => _db = db; + + private IQueryable Projected() => + _db.Seasons.AsNoTracking().Select(s => new SeasonDto + { + SeasonId = s.SeasonId, + LeagueId = s.LeagueId, + LeagueName = s.League.Name, + Country = s.League.Country, + Name = s.Name, + StartDate = s.StartDate, + EndDate = s.EndDate + }); + + public async Task> GetPagedAsync(PagedQuery q, CancellationToken ct = default) + { + var query = Projected(); + + if (!string.IsNullOrWhiteSpace(q.Search)) + { + var s = q.Search.Trim(); + query = query.Where(x => EF.Functions.ILike(x.Name, $"%{s}%") + || EF.Functions.ILike(x.LeagueName, $"%{s}%")); + } + + if (q.Filter("name") is { } name) + query = query.Where(x => EF.Functions.ILike(x.Name, $"%{name}%")); + if (q.Filter("leagueName") is { } league) + query = query.Where(x => EF.Functions.ILike(x.LeagueName, $"%{league}%")); + + query = (q.SortBy?.ToLowerInvariant()) switch + { + "league" => q.SortDesc ? query.OrderByDescending(x => x.LeagueName) : query.OrderBy(x => x.LeagueName), + "startdate" => q.SortDesc ? query.OrderByDescending(x => x.StartDate) : query.OrderBy(x => x.StartDate), + _ => q.SortDesc ? query.OrderByDescending(x => x.Name) : query.OrderBy(x => x.Name) + }; + + var total = await query.CountAsync(ct); + var items = await query.Skip((q.Page - 1) * q.PageSize).Take(q.PageSize).ToListAsync(ct); + return new PagedResult { Items = items, TotalCount = total, Page = q.Page, PageSize = q.PageSize }; + } + + public Task GetByIdAsync(int id, CancellationToken ct = default) => + Projected().FirstOrDefaultAsync(x => x.SeasonId == id, ct); + + public async Task> GetByLeagueAsync(int leagueId, CancellationToken ct = default) => + await Projected().Where(x => x.LeagueId == leagueId) + .OrderByDescending(x => x.StartDate).ToListAsync(ct); + + public async Task CreateAsync(SeasonCreateDto dto, CancellationToken ct = default) + { + var entity = new Season + { + LeagueId = dto.LeagueId, + Name = dto.Name, + StartDate = dto.StartDate, + EndDate = dto.EndDate + }; + _db.Seasons.Add(entity); + await _db.SaveChangesAsync(ct); + return (await GetByIdAsync(entity.SeasonId, ct))!; + } + + public async Task UpdateAsync(int id, SeasonUpdateDto dto, CancellationToken ct = default) + { + var entity = await _db.Seasons.FirstOrDefaultAsync(x => x.SeasonId == id, ct); + if (entity is null) return null; + + entity.LeagueId = dto.LeagueId; + entity.Name = dto.Name; + entity.StartDate = dto.StartDate; + entity.EndDate = dto.EndDate; + await _db.SaveChangesAsync(ct); + return await GetByIdAsync(id, ct); + } + + public async Task DeleteAsync(int id, CancellationToken ct = default) + { + var entity = await _db.Seasons.FirstOrDefaultAsync(x => x.SeasonId == id, ct); + if (entity is null) return false; + _db.Seasons.Remove(entity); + await _db.SaveChangesAsync(ct); + return true; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/StatsService.cs b/BookieApi/src/Bookie.Infrastructure/Services/StatsService.cs new file mode 100644 index 0000000..6ff0ea1 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/StatsService.cs @@ -0,0 +1,286 @@ +using Bookie.Application.DTOs.Reports; +using Bookie.Application.DTOs.Stats; +using Bookie.Application.Interfaces; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +/// Computes aggregated statistics for a single player or team from the match data. +public class StatsService : IStatsService +{ + private readonly BookieDbContext _db; + public StatsService(BookieDbContext db) => _db = db; + + public async Task GetPlayerStatsAsync(int playerId, CancellationToken ct = default) + { + var player = await _db.Players.AsNoTracking() + .Where(p => p.PlayerId == playerId) + .Select(p => new { p.PlayerId, p.FullName, p.Nationality, p.PrimaryPosition, p.BirthDate }) + .FirstOrDefaultAsync(ct); + + if (player is null) + return null; + + var dto = new PlayerStatsDto + { + PlayerId = player.PlayerId, + FullName = player.FullName, + Nationality = player.Nationality, + PrimaryPosition = player.PrimaryPosition, + BirthDate = player.BirthDate, + }; + + dto.CurrentTeam = await _db.PlayerContracts.AsNoTracking() + .Where(c => c.PlayerId == playerId && c.EndDate == null) + .OrderByDescending(c => c.StartDate) + .Select(c => c.Team.Name) + .FirstOrDefaultAsync(ct); + + var goals = await _db.MatchGoals.AsNoTracking() + .Where(g => g.PlayerId == playerId) + .Select(g => new + { + g.MatchId, + g.GoalType, + g.Minute, + g.AddedTime, + KickoffAt = g.Match.KickoffAt, + HomeTeamName = g.Match.HomeTeam.Name, + AwayTeamName = g.Match.AwayTeam.Name, + SeasonId = g.Match.Matchday.SeasonId, + SeasonName = g.Match.Matchday.Season.Name, + LeagueName = g.Match.Matchday.Season.League.Name, + }) + .ToListAsync(ct); + + var assists = await _db.MatchGoals.AsNoTracking() + .Where(g => g.AssistPlayerId == playerId) + .Select(g => new + { + SeasonId = g.Match.Matchday.SeasonId, + SeasonName = g.Match.Matchday.Season.Name, + LeagueName = g.Match.Matchday.Season.League.Name, + }) + .ToListAsync(ct); + + var cards = await _db.MatchCards.AsNoTracking() + .Where(c => c.PlayerId == playerId) + .Select(c => c.CardType) + .ToListAsync(ct); + + dto.TotalGoals = goals.Count; + dto.TotalAssists = assists.Count; + dto.MatchesScored = goals.Select(g => g.MatchId).Distinct().Count(); + dto.GoalsOpenPlay = goals.Count(g => g.GoalType == "open_play"); + dto.GoalsPenalty = goals.Count(g => g.GoalType == "penalty"); + dto.GoalsOwn = goals.Count(g => g.GoalType == "own_goal"); + dto.YellowCards = cards.Count(c => c == "yellow"); + dto.RedCards = cards.Count(c => c == "red"); + + // Merge goals + assists per season. + var seasonAcc = new Dictionary(); + PlayerSeasonStatDto SeasonRow(int id, string name, string league) + { + if (!seasonAcc.TryGetValue(id, out var row)) + { + row = new PlayerSeasonStatDto { SeasonName = name, LeagueName = league }; + seasonAcc[id] = row; + } + return row; + } + foreach (var g in goals) SeasonRow(g.SeasonId, g.SeasonName, g.LeagueName).Goals++; + foreach (var a in assists) SeasonRow(a.SeasonId, a.SeasonName, a.LeagueName).Assists++; + dto.Seasons = seasonAcc.Values + .OrderByDescending(s => s.Goals + s.Assists) + .ThenBy(s => s.SeasonName) + .ToList(); + + dto.RecentGoals = goals + .OrderByDescending(g => g.KickoffAt) + .Take(10) + .Select(g => new PlayerGoalDto + { + MatchId = g.MatchId, + KickoffAt = g.KickoffAt, + HomeTeamName = g.HomeTeamName, + AwayTeamName = g.AwayTeamName, + Minute = g.Minute, + AddedTime = g.AddedTime, + GoalType = g.GoalType, + }) + .ToList(); + + return dto; + } + + public async Task GetTeamStatsAsync(int teamId, CancellationToken ct = default) + { + var team = await _db.Teams.AsNoTracking() + .Where(t => t.TeamId == teamId) + .Select(t => new { t.TeamId, t.Name, t.City, t.Stadium }) + .FirstOrDefaultAsync(ct); + + if (team is null) + return null; + + var dto = new TeamStatsDto + { + TeamId = team.TeamId, + Name = team.Name, + City = team.City, + Stadium = team.Stadium, + }; + + var matches = await _db.Matches.AsNoTracking() + .Where(m => (m.HomeTeamId == teamId || m.AwayTeamId == teamId) + && m.Status == "finished" && m.HomeScoreFt != null && m.AwayScoreFt != null) + .Select(m => new + { + m.MatchId, + m.KickoffAt, + m.HomeTeamId, + HomeTeamName = m.HomeTeam.Name, + AwayTeamName = m.AwayTeam.Name, + m.HomeScoreFt, + m.AwayScoreFt, + SeasonId = m.Matchday.SeasonId, + SeasonName = m.Matchday.Season.Name, + LeagueName = m.Matchday.Season.League.Name, + }) + .ToListAsync(ct); + + var seasonAcc = new Dictionary(); + foreach (var m in matches) + { + var isHome = m.HomeTeamId == teamId; + var gf = (isHome ? m.HomeScoreFt : m.AwayScoreFt)!.Value; + var ga = (isHome ? m.AwayScoreFt : m.HomeScoreFt)!.Value; + + dto.Played++; + dto.GoalsFor += gf; + dto.GoalsAgainst += ga; + var win = gf > ga; + var loss = gf < ga; + if (win) dto.Wins++; + else if (loss) dto.Losses++; + else dto.Draws++; + + if (!seasonAcc.TryGetValue(m.SeasonId, out var s)) + { + s = new TeamSeasonStatDto { SeasonName = m.SeasonName, LeagueName = m.LeagueName }; + seasonAcc[m.SeasonId] = s; + } + s.Played++; + s.GoalsFor += gf; + s.GoalsAgainst += ga; + if (win) s.Wins++; + else if (loss) s.Losses++; + else s.Draws++; + } + + dto.Seasons = seasonAcc.Values + .OrderByDescending(s => s.Played) + .ThenBy(s => s.SeasonName) + .ToList(); + + // Form: last 5 finished, oldest -> newest. + dto.Form = matches + .OrderByDescending(m => m.KickoffAt) + .Take(5) + .Reverse() + .Select(m => + { + var isHome = m.HomeTeamId == teamId; + var gf = (isHome ? m.HomeScoreFt : m.AwayScoreFt)!.Value; + var ga = (isHome ? m.AwayScoreFt : m.HomeScoreFt)!.Value; + return new FormResultDto + { + Result = gf > ga ? "W" : gf < ga ? "L" : "D", + MatchId = m.MatchId, + KickoffAt = m.KickoffAt, + OpponentName = isHome ? m.AwayTeamName : m.HomeTeamName, + IsHome = isHome, + GoalsFor = gf, + GoalsAgainst = ga, + }; + }) + .ToList(); + + dto.RecentMatches = matches + .OrderByDescending(m => m.KickoffAt) + .Take(5) + .Select(m => new TeamRecentMatchDto + { + MatchId = m.MatchId, + KickoffAt = m.KickoffAt, + LeagueName = m.LeagueName, + SeasonName = m.SeasonName, + HomeTeamName = m.HomeTeamName, + AwayTeamName = m.AwayTeamName, + HomeScoreFt = m.HomeScoreFt, + AwayScoreFt = m.AwayScoreFt, + }) + .ToList(); + + // Averages across finished matches. + var stats = await _db.MatchTeamStats.AsNoTracking() + .Where(s => s.TeamId == teamId && s.Match.Status == "finished") + .Select(s => new + { + s.PossessionPct, s.ShotsTotal, s.ShotsOnTarget, s.Corners, + s.Fouls, s.Offsides, s.YellowCards, s.RedCards, + }) + .ToListAsync(ct); + + var avg = new SeasonAveragesDto { MatchesPlayed = stats.Count }; + if (stats.Count > 0) + { + avg.Possession = AvgN(stats.Select(x => x.PossessionPct.HasValue ? (double?)x.PossessionPct.Value : null), 1); + avg.ShotsTotal = AvgN(stats.Select(x => x.ShotsTotal.HasValue ? (double?)x.ShotsTotal.Value : null), 1); + avg.ShotsOnTarget = AvgN(stats.Select(x => x.ShotsOnTarget.HasValue ? (double?)x.ShotsOnTarget.Value : null), 1); + avg.Corners = AvgN(stats.Select(x => x.Corners.HasValue ? (double?)x.Corners.Value : null), 1); + avg.Fouls = AvgN(stats.Select(x => x.Fouls.HasValue ? (double?)x.Fouls.Value : null), 1); + avg.Offsides = AvgN(stats.Select(x => x.Offsides.HasValue ? (double?)x.Offsides.Value : null), 1); + avg.YellowCards = AvgN(stats.Select(x => (double?)x.YellowCards), 2); + avg.RedCards = AvgN(stats.Select(x => (double?)x.RedCards), 2); + } + dto.Averages = avg; + + // Top scorers (goals + assists) for this team. + var teamGoals = await _db.MatchGoals.AsNoTracking() + .Where(g => g.TeamId == teamId) + .Select(g => new { Scorer = g.Player.FullName, Assist = g.AssistPlayer != null ? g.AssistPlayer.FullName : null }) + .ToListAsync(ct); + + var scorerAcc = new Dictionary(); + TopScorerDto Scorer(string name) + { + if (!scorerAcc.TryGetValue(name, out var s)) + { + s = new TopScorerDto { PlayerName = name }; + scorerAcc[name] = s; + } + return s; + } + foreach (var g in teamGoals) + { + Scorer(g.Scorer).Goals++; + if (g.Assist is not null) Scorer(g.Assist).Assists++; + } + dto.TopScorers = scorerAcc.Values + .OrderByDescending(s => s.Goals) + .ThenByDescending(s => s.Assists) + .ThenBy(s => s.PlayerName) + .Take(5) + .ToList(); + + return dto; + } + + private static decimal? AvgN(IEnumerable values, int digits) + { + var vals = values.Where(v => v.HasValue).Select(v => v!.Value).ToList(); + return vals.Count > 0 ? (decimal)Math.Round(vals.Average(), digits) : null; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/Services/TeamService.cs b/BookieApi/src/Bookie.Infrastructure/Services/TeamService.cs new file mode 100644 index 0000000..92bc929 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/Services/TeamService.cs @@ -0,0 +1,104 @@ +using Bookie.Application.DTOs.Common; +using Bookie.Application.DTOs.Teams; +using Bookie.Application.Interfaces; +using Bookie.Domain.Entities; +using Bookie.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; + +namespace Bookie.Infrastructure.Services; + +public class TeamService : ITeamService +{ + private readonly BookieDbContext _db; + public TeamService(BookieDbContext db) => _db = db; + + private static TeamDto ToDto(Team t) => new() + { + TeamId = t.TeamId, + Name = t.Name, + ShortName = t.ShortName, + City = t.City, + Stadium = t.Stadium, + FoundedDate = t.FoundedDate + }; + + public async Task> GetPagedAsync(PagedQuery q, CancellationToken ct = default) + { + var query = _db.Teams.AsNoTracking(); + + if (!string.IsNullOrWhiteSpace(q.Search)) + { + var s = q.Search.Trim(); + query = query.Where(t => EF.Functions.ILike(t.Name, $"%{s}%") + || (t.City != null && EF.Functions.ILike(t.City, $"%{s}%"))); + } + + if (q.Filter("name") is { } name) + query = query.Where(t => EF.Functions.ILike(t.Name, $"%{name}%")); + if (q.Filter("city") is { } city) + query = query.Where(t => t.City != null && EF.Functions.ILike(t.City, $"%{city}%")); + if (q.Filter("stadium") is { } stadium) + query = query.Where(t => t.Stadium != null && EF.Functions.ILike(t.Stadium, $"%{stadium}%")); + + query = (q.SortBy?.ToLowerInvariant()) switch + { + "city" => q.SortDesc ? query.OrderByDescending(x => x.City) : query.OrderBy(x => x.City), + _ => q.SortDesc ? query.OrderByDescending(x => x.Name) : query.OrderBy(x => x.Name) + }; + + var total = await query.CountAsync(ct); + var entities = await query.Skip((q.Page - 1) * q.PageSize).Take(q.PageSize).ToListAsync(ct); + var items = entities.Select(ToDto).ToList(); + return new PagedResult { Items = items, TotalCount = total, Page = q.Page, PageSize = q.PageSize }; + } + + public async Task> GetAllAsync(CancellationToken ct = default) + { + var entities = await _db.Teams.AsNoTracking().OrderBy(t => t.Name).ToListAsync(ct); + return entities.Select(ToDto).ToList(); + } + + public async Task GetByIdAsync(int id, CancellationToken ct = default) + { + var t = await _db.Teams.AsNoTracking().FirstOrDefaultAsync(x => x.TeamId == id, ct); + return t is null ? null : ToDto(t); + } + + public async Task CreateAsync(TeamCreateDto dto, CancellationToken ct = default) + { + var entity = new Team + { + Name = dto.Name, + ShortName = dto.ShortName, + City = dto.City, + Stadium = dto.Stadium, + FoundedDate = dto.FoundedDate + }; + _db.Teams.Add(entity); + await _db.SaveChangesAsync(ct); + return ToDto(entity); + } + + public async Task UpdateAsync(int id, TeamUpdateDto dto, CancellationToken ct = default) + { + var entity = await _db.Teams.FirstOrDefaultAsync(x => x.TeamId == id, ct); + if (entity is null) return null; + + entity.Name = dto.Name; + entity.ShortName = dto.ShortName; + entity.City = dto.City; + entity.Stadium = dto.Stadium; + entity.FoundedDate = dto.FoundedDate; + await _db.SaveChangesAsync(ct); + return ToDto(entity); + } + + public async Task DeleteAsync(int id, CancellationToken ct = default) + { + var entity = await _db.Teams.FirstOrDefaultAsync(x => x.TeamId == id, ct); + if (entity is null) return false; + _db.Teams.Remove(entity); + await _db.SaveChangesAsync(ct); + return true; + } +} diff --git a/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Application.dll b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Application.dll new file mode 100644 index 0000000..d346a56 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Application.dll differ diff --git a/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Application.pdb b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Application.pdb new file mode 100644 index 0000000..34dac61 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Application.pdb differ diff --git a/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Domain.dll b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Domain.dll new file mode 100644 index 0000000..0a94d58 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Domain.dll differ diff --git a/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Domain.pdb b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Domain.pdb new file mode 100644 index 0000000..85e64d9 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Domain.pdb differ diff --git a/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.deps.json b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.deps.json new file mode 100644 index 0000000..925d335 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.deps.json @@ -0,0 +1,1098 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v10.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v10.0": { + "Bookie.Infrastructure/1.0.0": { + "dependencies": { + "Bookie.Application": "1.0.0", + "Bookie.Domain": "1.0.0", + "Microsoft.EntityFrameworkCore.Design": "10.0.4", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11", + "Microsoft.Extensions.Http": "10.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.11", + "Npgsql.EntityFrameworkCore.PostgreSQL": "10.0.3", + "System.IdentityModel.Tokens.Jwt": "8.22.0" + }, + "runtime": { + "Bookie.Infrastructure.dll": {} + } + }, + "Humanizer.Core/2.14.1": { + "runtime": { + "lib/net6.0/Humanizer.dll": { + "assemblyVersion": "2.14.0.0", + "fileVersion": "2.14.1.48190" + } + } + }, + "Microsoft.Bcl.Cryptography/10.0.2": { + "runtime": { + "lib/net10.0/Microsoft.Bcl.Cryptography.dll": { + "assemblyVersion": "10.0.0.2", + "fileVersion": "10.0.225.61305" + } + } + }, + "Microsoft.Build.Framework/18.0.2": { + "runtime": { + "lib/net10.0/Microsoft.Build.Framework.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "18.0.2.52102" + } + } + }, + "Microsoft.CodeAnalysis.Common/5.0.0": { + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.25.56712" + } + }, + "resources": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/5.0.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "5.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.25.56712" + } + }, + "resources": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/5.0.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "5.0.0", + "Microsoft.CodeAnalysis.Common": "5.0.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "5.0.0", + "System.Composition": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.25.56712" + } + }, + "resources": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/5.0.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.Common": "5.0.0", + "System.Composition": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.25.56712" + } + }, + "resources": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/5.0.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Build.Framework": "18.0.2", + "Microsoft.CodeAnalysis.Workspaces.Common": "5.0.0", + "Microsoft.Extensions.DependencyInjection": "10.0.4", + "Microsoft.Extensions.Logging": "10.0.4", + "Microsoft.Extensions.Logging.Abstractions": "10.0.4", + "Microsoft.Extensions.Options": "10.0.11", + "Microsoft.Extensions.Primitives": "10.0.11", + "Microsoft.VisualStudio.SolutionPersistence": "1.0.52", + "Newtonsoft.Json": "13.0.3", + "System.Composition": "9.0.0" + }, + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.25.56712" + }, + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.25.56712" + } + }, + "resources": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.EntityFrameworkCore/10.0.4": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.4", + "Microsoft.Extensions.Caching.Memory": "10.0.4", + "Microsoft.Extensions.Logging": "10.0.4" + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.4": { + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.EntityFrameworkCore.Design/10.0.4": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Build.Framework": "18.0.2", + "Microsoft.CodeAnalysis.CSharp": "5.0.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "5.0.0", + "Microsoft.CodeAnalysis.Workspaces.MSBuild": "5.0.0", + "Microsoft.EntityFrameworkCore.Relational": "10.0.4", + "Microsoft.Extensions.Caching.Memory": "10.0.4", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11", + "Microsoft.Extensions.DependencyModel": "10.0.4", + "Microsoft.Extensions.Logging": "10.0.4", + "Mono.TextTemplating": "3.0.0", + "Newtonsoft.Json": "13.0.3" + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Design.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.4": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "10.0.4", + "Microsoft.Extensions.Caching.Memory": "10.0.4", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11", + "Microsoft.Extensions.Logging": "10.0.4" + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "assemblyVersion": "10.0.4.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.Extensions.Caching.Abstractions/10.0.4": { + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.Extensions.Caching.Memory/10.0.4": { + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "10.0.4", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.11", + "Microsoft.Extensions.Logging.Abstractions": "10.0.4", + "Microsoft.Extensions.Options": "10.0.11", + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Caching.Memory.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.Extensions.Configuration/10.0.11": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11", + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Configuration.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/10.0.11": { + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Microsoft.Extensions.Configuration.Binder/10.0.11": { + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.11", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Configuration.Binder.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Microsoft.Extensions.DependencyInjection/10.0.4": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.11": { + "runtime": { + "lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Microsoft.Extensions.DependencyModel/10.0.4": { + "runtime": { + "lib/net10.0/Microsoft.Extensions.DependencyModel.dll": { + "assemblyVersion": "10.0.0.4", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.Extensions.Diagnostics/10.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.11", + "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Diagnostics.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.25.52411" + } + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions/10.0.0": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.11", + "Microsoft.Extensions.Options": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.25.52411" + } + } + }, + "Microsoft.Extensions.Http/10.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.11", + "Microsoft.Extensions.Diagnostics": "10.0.0", + "Microsoft.Extensions.Logging": "10.0.4", + "Microsoft.Extensions.Logging.Abstractions": "10.0.4", + "Microsoft.Extensions.Options": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Http.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.25.52411" + } + } + }, + "Microsoft.Extensions.Logging/10.0.4": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "10.0.4", + "Microsoft.Extensions.Logging.Abstractions": "10.0.4", + "Microsoft.Extensions.Options": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/10.0.4": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.426.12010" + } + } + }, + "Microsoft.Extensions.Options/10.0.11": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.11", + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/10.0.11": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11", + "Microsoft.Extensions.Configuration.Binder": "10.0.11", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.11", + "Microsoft.Extensions.Options": "10.0.11", + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Microsoft.Extensions.Primitives/10.0.11": { + "runtime": { + "lib/net10.0/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "10.0.0.0", + "fileVersion": "10.0.1126.37416" + } + } + }, + "Microsoft.IdentityModel.Abstractions/8.22.0": { + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Abstractions.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Microsoft.IdentityModel.JsonWebTokens/8.22.0": { + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.22.0" + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Microsoft.IdentityModel.Logging/8.22.0": { + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "8.22.0" + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Logging.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Microsoft.IdentityModel.Tokens/8.22.0": { + "dependencies": { + "Microsoft.Bcl.Cryptography": "10.0.2", + "Microsoft.Extensions.Logging.Abstractions": "10.0.4", + "Microsoft.IdentityModel.Logging": "8.22.0" + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Tokens.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Microsoft.VisualStudio.SolutionPersistence/1.0.52": { + "runtime": { + "lib/net8.0/Microsoft.VisualStudio.SolutionPersistence.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.52.6595" + } + } + }, + "Mono.TextTemplating/3.0.0": { + "dependencies": { + "System.CodeDom": "6.0.0" + }, + "runtime": { + "lib/net6.0/Mono.TextTemplating.dll": { + "assemblyVersion": "3.0.0.0", + "fileVersion": "3.0.0.1" + } + } + }, + "Newtonsoft.Json/13.0.3": { + "runtime": { + "lib/net6.0/Newtonsoft.Json.dll": { + "assemblyVersion": "13.0.0.0", + "fileVersion": "13.0.3.27908" + } + } + }, + "Npgsql/10.0.3": { + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "10.0.4" + }, + "runtime": { + "lib/net10.0/Npgsql.dll": { + "assemblyVersion": "10.0.3.0", + "fileVersion": "10.0.3.0" + } + } + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/10.0.3": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "10.0.4", + "Microsoft.EntityFrameworkCore.Relational": "10.0.4", + "Npgsql": "10.0.3" + }, + "runtime": { + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": { + "assemblyVersion": "10.0.3.0", + "fileVersion": "10.0.3.0" + } + } + }, + "System.CodeDom/6.0.0": { + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "System.Composition/9.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "9.0.0", + "System.Composition.Convention": "9.0.0", + "System.Composition.Hosting": "9.0.0", + "System.Composition.Runtime": "9.0.0", + "System.Composition.TypedParts": "9.0.0" + } + }, + "System.Composition.AttributedModel/9.0.0": { + "runtime": { + "lib/net9.0/System.Composition.AttributedModel.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "System.Composition.Convention/9.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "9.0.0" + }, + "runtime": { + "lib/net9.0/System.Composition.Convention.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "System.Composition.Hosting/9.0.0": { + "dependencies": { + "System.Composition.Runtime": "9.0.0" + }, + "runtime": { + "lib/net9.0/System.Composition.Hosting.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "System.Composition.Runtime/9.0.0": { + "runtime": { + "lib/net9.0/System.Composition.Runtime.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "System.Composition.TypedParts/9.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "9.0.0", + "System.Composition.Hosting": "9.0.0", + "System.Composition.Runtime": "9.0.0" + }, + "runtime": { + "lib/net9.0/System.Composition.TypedParts.dll": { + "assemblyVersion": "9.0.0.0", + "fileVersion": "9.0.24.52809" + } + } + }, + "System.IdentityModel.Tokens.Jwt/8.22.0": { + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "8.22.0", + "Microsoft.IdentityModel.Tokens": "8.22.0" + }, + "runtime": { + "lib/net10.0/System.IdentityModel.Tokens.Jwt.dll": { + "assemblyVersion": "8.22.0.0", + "fileVersion": "8.22.0.26208" + } + } + }, + "Bookie.Application/1.0.0": { + "dependencies": { + "Bookie.Domain": "1.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11" + }, + "runtime": { + "Bookie.Application.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Bookie.Domain/1.0.0": { + "runtime": { + "Bookie.Domain.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + } + } + }, + "libraries": { + "Bookie.Infrastructure/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Humanizer.Core/2.14.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==", + "path": "humanizer.core/2.14.1", + "hashPath": "humanizer.core.2.14.1.nupkg.sha512" + }, + "Microsoft.Bcl.Cryptography/10.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LG9Yll3B5aNpxv0+D47g6LiOiKBIlodhcHdQwcYzo8VeexFLGqx5ymetmA2aBRyo9cCcWsQWrFsdbsr8LvmWDw==", + "path": "microsoft.bcl.cryptography/10.0.2", + "hashPath": "microsoft.bcl.cryptography.10.0.2.nupkg.sha512" + }, + "Microsoft.Build.Framework/18.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sOSb+0J4G/jCBW/YqmRuL0eOMXgfw1KQLdC9TkbvfA5xs7uNm+PBQXJCOzSJGXtZcZrtXozcwxPmUiRUbmd7FA==", + "path": "microsoft.build.framework/18.0.2", + "hashPath": "microsoft.build.framework.18.0.2.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Common/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZXRAdvH6GiDeHRyd3q/km8Z44RoM6FBWHd+gen/la81mVnAdHTEsEkO5J0TCNXBymAcx5UYKt5TvgKBhaLJEow==", + "path": "microsoft.codeanalysis.common/5.0.0", + "hashPath": "microsoft.codeanalysis.common.5.0.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5DSyJ9bk+ATuDy7fp2Zt0mJStDVKbBoiz1DyfAwSa+k4H4IwykAUcV3URelw5b8/iVbfSaOwkwmPUZH6opZKCw==", + "path": "microsoft.codeanalysis.csharp/5.0.0", + "hashPath": "microsoft.codeanalysis.csharp.5.0.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Al/Q8B+yO8odSqGVpSvrShMFDvlQdIBU//F3E6Rb0YdiLSALE9wh/pvozPNnfmh5HDnvU+mkmSjpz4hQO++jaA==", + "path": "microsoft.codeanalysis.csharp.workspaces/5.0.0", + "hashPath": "microsoft.codeanalysis.csharp.workspaces.5.0.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.Common/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZbUmIvT6lqTNKiv06Jl5wf0MTMi1vQ1oH7ou4CLcs2C/no/L7EhP3T8y3XXvn9VbqMcJaJnEsNA1jwYUMgc5jg==", + "path": "microsoft.codeanalysis.workspaces.common/5.0.0", + "hashPath": "microsoft.codeanalysis.workspaces.common.5.0.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/G+LVoAGMz6Ae8nm+PGLxSw+F5RjYx/J7irbTO5uKAPw1bxHyQJLc/YOnpDxt+EpPtYxvC9wvBsg/kETZp1F9Q==", + "path": "microsoft.codeanalysis.workspaces.msbuild/5.0.0", + "hashPath": "microsoft.codeanalysis.workspaces.msbuild.5.0.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kzTsfFK2GCytp6DDTfQOmxPU4gbGdrIlP7PxrxF3ESNLtfXrC8BoUVZENBN2WORlZPAD7CVX6AYIglgkpXQooA==", + "path": "microsoft.entityframeworkcore/10.0.4", + "hashPath": "microsoft.entityframeworkcore.10.0.4.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qDcJqCfN1XYyX0ID/Hd9/kQTRvlia8S+Yuwyl9uFhBIKnOCbl9WMdGQCzbZUKbkpkfvf3P9CDdXsnxHyE3O0Aw==", + "path": "microsoft.entityframeworkcore.abstractions/10.0.4", + "hashPath": "microsoft.entityframeworkcore.abstractions.10.0.4.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Design/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FmiUU5xdu1chVxnmsu/mEpCKVQ5+lvIxdP0194lE7HfoU1jO4z/9qnWZpd0kSkVve4gOnRm1lE20kkhlMqJJIg==", + "path": "microsoft.entityframeworkcore.design/10.0.4", + "hashPath": "microsoft.entityframeworkcore.design.10.0.4.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DOTjTHy93W3TwpMLM4SCm0n57Sc0Jj3+m2S6LSTstKyBB34eT1UouaMS19mpWwvtj42+sRiEjA3+rOTNoNzXFQ==", + "path": "microsoft.entityframeworkcore.relational/10.0.4", + "hashPath": "microsoft.entityframeworkcore.relational.10.0.4.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Abstractions/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uDRooaV6N3WZ0kdlNPMB68/MdGn/in1Fs7Db7DnIm85RBTPy4P321WO+daAImiYpH5dekjNggDqy1N44WaIlMA==", + "path": "microsoft.extensions.caching.abstractions/10.0.4", + "hashPath": "microsoft.extensions.caching.abstractions.10.0.4.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Memory/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CLLussNUMdSbyJOu4VBF7sqskHGB/5N1EcFzrqG/HsPATN8fCRUcfp0qns1VwkxKHwxrtYCh5FKe+kM81Q1PHA==", + "path": "microsoft.extensions.caching.memory/10.0.4", + "hashPath": "microsoft.extensions.caching.memory.10.0.4.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wlhRqZW8LcJPa+vk2oLAc/REXDItHtkFQdf/QcXYGZbZOO13izcsKY1pCvuFQYwUiZD+hwSZwsKASjqT+BNaVg==", + "path": "microsoft.extensions.configuration/10.0.11", + "hashPath": "microsoft.extensions.configuration.10.0.11.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fVi053xdpda9Em7vSkmgVxO/PtgC2m78ekReKWsgcyskqY0U82Bz/MONwxpGzI0hElYKJfw+fupqMVeKW3fSaA==", + "path": "microsoft.extensions.configuration.abstractions/10.0.11", + "hashPath": "microsoft.extensions.configuration.abstractions.10.0.11.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rFn8RuszZn3qquPVkDytMUlPc2+rXl9MCoygwc1XmAgC5vg5/oXJ8hkOosOrLoBLsqdTy4lFwP6iQdPS9uSYOA==", + "path": "microsoft.extensions.configuration.binder/10.0.11", + "hashPath": "microsoft.extensions.configuration.binder.10.0.11.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NkvJ8aSr3AG30yabjv7ZWwTG/wq5OElNTlNq39Ok2HSEF3TIwAc1f1xnTJlR/GuoJmEgkfT7WBO9YbSXRk41+g==", + "path": "microsoft.extensions.dependencyinjection/10.0.4", + "hashPath": "microsoft.extensions.dependencyinjection.10.0.4.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/a1aJz4m7ylhEDf25ugQChLQoN5XwoGjWw/BoR/ZWWKsO1v4DdJElS1uyngahz4B/eOzjFk1KNTkarRLE5wsIg==", + "path": "microsoft.extensions.dependencyinjection.abstractions/10.0.11", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.11.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyModel/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LiJXylfk8pk+2zsUsITkou3QTFMJ8RNJ0oKKY0Oyjt6HJctGJwPw//ZgoNO4J29zKaT+dR4/PI2jW/znRcspLg==", + "path": "microsoft.extensions.dependencymodel/10.0.4", + "hashPath": "microsoft.extensions.dependencymodel.10.0.4.nupkg.sha512" + }, + "Microsoft.Extensions.Diagnostics/10.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xjkxIPgrT0mKTfBwb+CVqZnRchyZgzKIfDQOp8z+WUC6vPe3WokIf71z+hJPkH0YBUYJwa7Z/al1R087ib9oiw==", + "path": "microsoft.extensions.diagnostics/10.0.0", + "hashPath": "microsoft.extensions.diagnostics.10.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Diagnostics.Abstractions/10.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SfK89ytD61S7DgzorFljSkUeluC1ncn6dtZgwc0ot39f/BEYWBl5jpgvodxduoYAs1d9HG8faCDRZxE95UMo2A==", + "path": "microsoft.extensions.diagnostics.abstractions/10.0.0", + "hashPath": "microsoft.extensions.diagnostics.abstractions.10.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Http/10.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-r+mSvm/Ryc/iYcc9zcUG5VP9EBB8PL1rgVU6macEaYk45vmGRk9PntM3aynFKN6s3Q4WW36kedTycIctctpTUQ==", + "path": "microsoft.extensions.http/10.0.0", + "hashPath": "microsoft.extensions.http.10.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-S8+6fCuMOhJZGk8sGFtOy3VsF9mk9x4UOL59GM91REiA/fmCDjunKKIw4RmStG87qyXPfxelDJf2pXIbTuaBdw==", + "path": "microsoft.extensions.logging/10.0.4", + "hashPath": "microsoft.extensions.logging.10.0.4.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/10.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PDMMt7fvBatv6hcxxyJtXIzSwn7Dy00W6I2vDAOTYrQqNM2dF5A2L9n0uMzdPz2IPoNZWkAmYjoOCEdDLq0i4w==", + "path": "microsoft.extensions.logging.abstractions/10.0.4", + "hashPath": "microsoft.extensions.logging.abstractions.10.0.4.nupkg.sha512" + }, + "Microsoft.Extensions.Options/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-eY1GAKcTfD2maP27J84X9IovT3yjHJ2dVDzPmDg6/XqYvt3jMzJhtfQCLjG9pVsZGAd+8DQ2QrjaDcs2+VQLGw==", + "path": "microsoft.extensions.options/10.0.11", + "hashPath": "microsoft.extensions.options.10.0.11.nupkg.sha512" + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-syEhXQ/sEaSBFaqzlp9gDGHX/nk6gkQkh1sIUpBO1mlBj3Phu1rmb4ML1uCiyPW9N6Kxfxv3y5FGObC+bV01Qw==", + "path": "microsoft.extensions.options.configurationextensions/10.0.11", + "hashPath": "microsoft.extensions.options.configurationextensions.10.0.11.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/10.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SXcz+kF+4Oo9b1+55zntpJFYfwb1jw66ioxptyNOOTDc8g2FHnBFWjZpsWfCvZIhzr0x+4e2trVTs4OKwQfBtw==", + "path": "microsoft.extensions.primitives/10.0.11", + "hashPath": "microsoft.extensions.primitives.10.0.11.nupkg.sha512" + }, + "Microsoft.IdentityModel.Abstractions/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LU3V3owsu4vGpCg2kyL7SsQEuHwcoJ8FSNBqzLADzCf3/PcKUTcx5Plsd51DoTJMfK/WigXV/03UhaN5JXE6uQ==", + "path": "microsoft.identitymodel.abstractions/8.22.0", + "hashPath": "microsoft.identitymodel.abstractions.8.22.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.JsonWebTokens/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kv6peMLjALZLDAy2H3F77KjVRdwiscn2p/g3ui2chcbuEcAX2MpAbyDcYnJ7Vyh8jZ1aJWrniUMCDWoOgnu4NQ==", + "path": "microsoft.identitymodel.jsonwebtokens/8.22.0", + "hashPath": "microsoft.identitymodel.jsonwebtokens.8.22.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.Logging/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-G9Tl0yXSlr2pkXv4EpXjO16M4q6oo9N/od+gNyOusZ8yM8LZg1H3f/QOMFuOJiV6znzY5MkAREU97JRRnqpEQw==", + "path": "microsoft.identitymodel.logging/8.22.0", + "hashPath": "microsoft.identitymodel.logging.8.22.0.nupkg.sha512" + }, + "Microsoft.IdentityModel.Tokens/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-i4lywKKUuVmheCUA+w/q8QNPReNI0qanHI9hhz48AFqD1ljyb8sxPL2RbXOGiPV13XdJ4kxieL9ukS7tD43LxA==", + "path": "microsoft.identitymodel.tokens/8.22.0", + "hashPath": "microsoft.identitymodel.tokens.8.22.0.nupkg.sha512" + }, + "Microsoft.VisualStudio.SolutionPersistence/1.0.52": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oNv2JtYXhpdJrX63nibx1JT3uCESOBQ1LAk7Dtz/sr0+laW0KRM6eKp4CZ3MHDR2siIkKsY8MmUkeP5DKkQQ5w==", + "path": "microsoft.visualstudio.solutionpersistence/1.0.52", + "hashPath": "microsoft.visualstudio.solutionpersistence.1.0.52.nupkg.sha512" + }, + "Mono.TextTemplating/3.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YqueG52R/Xej4VVbKuRIodjiAhV0HR/XVbLbNrJhCZnzjnSjgMJ/dCdV0akQQxavX6hp/LC6rqLGLcXeQYU7XA==", + "path": "mono.texttemplating/3.0.0", + "hashPath": "mono.texttemplating.3.0.0.nupkg.sha512" + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==", + "path": "newtonsoft.json/13.0.3", + "hashPath": "newtonsoft.json.13.0.3.nupkg.sha512" + }, + "Npgsql/10.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==", + "path": "npgsql/10.0.3", + "hashPath": "npgsql.10.0.3.nupkg.sha512" + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/10.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-IPGrrZnRkuW7OlHDhUESZz4G5DLkW7Nej/O3Cx+0iTsgyU5XJxBgpsvTHLloo3WWuAKKbDHXBvWPVkX1deRh1Q==", + "path": "npgsql.entityframeworkcore.postgresql/10.0.3", + "hashPath": "npgsql.entityframeworkcore.postgresql.10.0.3.nupkg.sha512" + }, + "System.CodeDom/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==", + "path": "system.codedom/6.0.0", + "hashPath": "system.codedom.6.0.0.nupkg.sha512" + }, + "System.Composition/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Djj70fFTraOarSKmRnmRy/zm4YurICm+kiCtI0dYRqGJnLX6nJ+G3WYuFJ173cAPax/gh96REcbNiVqcrypFQ==", + "path": "system.composition/9.0.0", + "hashPath": "system.composition.9.0.0.nupkg.sha512" + }, + "System.Composition.AttributedModel/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iri00l/zIX9g4lHMY+Nz0qV1n40+jFYAmgsaiNn16xvt2RDwlqByNG4wgblagnDYxm3YSQQ0jLlC/7Xlk9CzyA==", + "path": "system.composition.attributedmodel/9.0.0", + "hashPath": "system.composition.attributedmodel.9.0.0.nupkg.sha512" + }, + "System.Composition.Convention/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+vuqVP6xpi582XIjJi6OCsIxuoTZfR0M7WWufk3uGDeCl3wGW6KnpylUJ3iiXdPByPE0vR5TjJgR6hDLez4FQg==", + "path": "system.composition.convention/9.0.0", + "hashPath": "system.composition.convention.9.0.0.nupkg.sha512" + }, + "System.Composition.Hosting/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OFqSeFeJYr7kHxDfaViGM1ymk7d4JxK//VSoNF9Ux0gpqkLsauDZpu89kTHHNdCWfSljbFcvAafGyBoY094btQ==", + "path": "system.composition.hosting/9.0.0", + "hashPath": "system.composition.hosting.9.0.0.nupkg.sha512" + }, + "System.Composition.Runtime/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-w1HOlQY1zsOWYussjFGZCEYF2UZXgvoYnS94NIu2CBnAGMbXFAX8PY8c92KwUItPmowal68jnVLBCzdrWLeEKA==", + "path": "system.composition.runtime/9.0.0", + "hashPath": "system.composition.runtime.9.0.0.nupkg.sha512" + }, + "System.Composition.TypedParts/9.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aRZlojCCGEHDKqh43jaDgaVpYETsgd7Nx4g1zwLKMtv4iTo0627715ajEFNpEEBTgLmvZuv8K0EVxc3sM4NWJA==", + "path": "system.composition.typedparts/9.0.0", + "hashPath": "system.composition.typedparts.9.0.0.nupkg.sha512" + }, + "System.IdentityModel.Tokens.Jwt/8.22.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CpXGfNhLl6EgYaOC9XYsc1p7Ci9HtAy0soHJDSBNGse647al4tTq9RDr+LQsrF4Ls79Dx7VfzN34km0W4DWPow==", + "path": "system.identitymodel.tokens.jwt/8.22.0", + "hashPath": "system.identitymodel.tokens.jwt.8.22.0.nupkg.sha512" + }, + "Bookie.Application/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Bookie.Domain/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.dll b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.dll new file mode 100644 index 0000000..0125b73 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.dll differ diff --git a/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.pdb b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.pdb new file mode 100644 index 0000000..f19cf54 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.pdb differ diff --git a/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.runtimeconfig.json b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.runtimeconfig.json new file mode 100644 index 0000000..d8ac2bc --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.runtimeconfig.json @@ -0,0 +1,13 @@ +{ + "runtimeOptions": { + "tfm": "net10.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "10.0.0" + }, + "configProperties": { + "System.Reflection.NullabilityInfoContext.IsSupported": true, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Bookie.Infrastructure.csproj.nuget.dgspec.json b/BookieApi/src/Bookie.Infrastructure/obj/Bookie.Infrastructure.csproj.nuget.dgspec.json new file mode 100644 index 0000000..ea2bc92 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Bookie.Infrastructure.csproj.nuget.dgspec.json @@ -0,0 +1,1055 @@ +{ + "format": 1, + "restore": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj": {} + }, + "projects": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj", + "projectName": "Bookie.Application", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[10.0.11, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "projectName": "Bookie.Domain", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj", + "projectName": "Bookie.Infrastructure", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj" + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "dependencies": { + "Microsoft.EntityFrameworkCore.Design": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[10.0.4, )" + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[10.0.11, )" + }, + "Microsoft.Extensions.Http": { + "target": "Package", + "version": "[10.0.0, )" + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "target": "Package", + "version": "[10.0.11, )" + }, + "Npgsql.EntityFrameworkCore.PostgreSQL": { + "target": "Package", + "version": "[10.0.3, )" + }, + "System.IdentityModel.Tokens.Jwt": { + "target": "Package", + "version": "[8.22.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Bookie.Infrastructure.csproj.nuget.g.props b/BookieApi/src/Bookie.Infrastructure/obj/Bookie.Infrastructure.csproj.nuget.g.props new file mode 100644 index 0000000..8550026 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Bookie.Infrastructure.csproj.nuget.g.props @@ -0,0 +1,23 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /Users/piotrkus/.nuget/packages/ + /Users/piotrkus/.nuget/packages/ + PackageReference + 7.0.0 + + + + + + + + + + + /Users/piotrkus/.nuget/packages/microsoft.codeanalysis.analyzers/3.11.0 + + \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Bookie.Infrastructure.csproj.nuget.g.targets b/BookieApi/src/Bookie.Infrastructure/obj/Bookie.Infrastructure.csproj.nuget.g.targets new file mode 100644 index 0000000..03ce93e --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Bookie.Infrastructure.csproj.nuget.g.targets @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs new file mode 100644 index 0000000..925b135 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")] diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.I.01AAFDE3.Up2Date b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.I.01AAFDE3.Up2Date new file mode 100644 index 0000000..e69de29 diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.AssemblyInfo.cs b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.AssemblyInfo.cs new file mode 100644 index 0000000..350365c --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Bookie.Infrastructure")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Bookie.Infrastructure")] +[assembly: System.Reflection.AssemblyTitleAttribute("Bookie.Infrastructure")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Wygenerowane przez klasę WriteCodeFragment programu MSBuild. + diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.AssemblyInfoInputs.cache b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.AssemblyInfoInputs.cache new file mode 100644 index 0000000..8e84141 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +a12ee9f0d1abb7d1e7a7e0f7571c81ca77d715edfa45430e95dbc9ec04237d2f diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.GeneratedMSBuildEditorConfig.editorconfig b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..8cbf836 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,25 @@ +is_global = true +build_property.TargetFramework = net10.0 +build_property.TargetFramework = net10.0 +build_property.TargetPlatformMinVersion = +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.TargetFrameworkIdentifier = .NETCoreApp +build_property.TargetFrameworkVersion = v10.0 +build_property.RootNamespace = Bookie.Infrastructure +build_property.ProjectDir = /Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 10.0 +build_property.EnableCodeStyleSeverity = diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.GlobalUsings.g.cs b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.GlobalUsings.g.cs new file mode 100644 index 0000000..d12bcbc --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using System; +global using System.Collections.Generic; +global using System.IO; +global using System.Linq; +global using System.Net.Http; +global using System.Threading; +global using System.Threading.Tasks; diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.assets.cache b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.assets.cache new file mode 100644 index 0000000..4110c6e Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.assets.cache differ diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.AssemblyReference.cache b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.AssemblyReference.cache new file mode 100644 index 0000000..20fce4e Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.AssemblyReference.cache differ diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.CoreCompileInputs.cache b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..79a3d7f --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +e05bfb972146e0b0bfa39db1436bbbea24da6e90c36dd27b9d029a51cb20fc77 diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.FileListAbsolute.txt b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..b88f8d7 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.FileListAbsolute.txt @@ -0,0 +1,19 @@ +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.AssemblyReference.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.GeneratedMSBuildEditorConfig.editorconfig +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.AssemblyInfoInputs.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.AssemblyInfo.cs +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.csproj.CoreCompileInputs.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.deps.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.runtimeconfig.json +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Infrastructure.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Application.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Domain.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Domain.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/bin/Debug/net10.0/Bookie.Application.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.I.01AAFDE3.Up2Date +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/refint/Bookie.Infrastructure.dll +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.pdb +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.genruntimeconfig.cache +/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/ref/Bookie.Infrastructure.dll diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.dll b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.dll new file mode 100644 index 0000000..0125b73 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.dll differ diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.genruntimeconfig.cache b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.genruntimeconfig.cache new file mode 100644 index 0000000..6f507e8 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.genruntimeconfig.cache @@ -0,0 +1 @@ +e797ddaaac1cedbe387099fc3606a2b5c69fad0db21153cd31e6c7b990e4d891 diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.pdb b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.pdb new file mode 100644 index 0000000..f19cf54 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/Bookie.Infrastructure.pdb differ diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/ref/Bookie.Infrastructure.dll b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/ref/Bookie.Infrastructure.dll new file mode 100644 index 0000000..d160686 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/ref/Bookie.Infrastructure.dll differ diff --git a/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/refint/Bookie.Infrastructure.dll b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/refint/Bookie.Infrastructure.dll new file mode 100644 index 0000000..d160686 Binary files /dev/null and b/BookieApi/src/Bookie.Infrastructure/obj/Debug/net10.0/refint/Bookie.Infrastructure.dll differ diff --git a/BookieApi/src/Bookie.Infrastructure/obj/project.assets.json b/BookieApi/src/Bookie.Infrastructure/obj/project.assets.json new file mode 100644 index 0000000..f5c9b19 --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/project.assets.json @@ -0,0 +1,3631 @@ +{ + "version": 3, + "targets": { + "net10.0": { + "Humanizer.Core/2.14.1": { + "type": "package", + "compile": { + "lib/net6.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Humanizer.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Bcl.Cryptography/10.0.2": { + "type": "package", + "compile": { + "lib/net10.0/Microsoft.Bcl.Cryptography.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Bcl.Cryptography.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Build.Framework/18.0.2": { + "type": "package", + "compile": { + "ref/net10.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Build.Framework.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.CodeAnalysis.Analyzers/3.11.0": { + "type": "package", + "build": { + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.props": {}, + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.targets": {} + } + }, + "Microsoft.CodeAnalysis.Common/5.0.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.11.0" + }, + "compile": { + "lib/net9.0/_._": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp/5.0.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.11.0", + "Microsoft.CodeAnalysis.Common": "[5.0.0]" + }, + "compile": { + "lib/net9.0/_._": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/5.0.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.Analyzers": "3.11.0", + "Microsoft.CodeAnalysis.CSharp": "[5.0.0]", + "Microsoft.CodeAnalysis.Common": "[5.0.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[5.0.0]", + "System.Composition": "9.0.0" + }, + "compile": { + "lib/net9.0/_._": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/5.0.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.Analyzers": "3.11.0", + "Microsoft.CodeAnalysis.Common": "[5.0.0]", + "System.Composition": "9.0.0" + }, + "compile": { + "lib/net9.0/_._": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/5.0.0": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Build.Framework": "17.11.31", + "Microsoft.CodeAnalysis.Analyzers": "3.11.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "[5.0.0]", + "Microsoft.Extensions.DependencyInjection": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0", + "Microsoft.VisualStudio.SolutionPersistence": "1.0.52", + "Newtonsoft.Json": "13.0.3", + "System.Composition": "9.0.0" + }, + "compile": { + "lib/net9.0/_._": {} + }, + "runtime": { + "lib/net9.0/Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler.dll": {}, + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": { + "related": ".pdb;.xml" + } + }, + "resource": { + "lib/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "cs" + }, + "lib/net9.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "de" + }, + "lib/net9.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "es" + }, + "lib/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "fr" + }, + "lib/net9.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "it" + }, + "lib/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "ja" + }, + "lib/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "ko" + }, + "lib/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "pl" + }, + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "pt-BR" + }, + "lib/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "ru" + }, + "lib/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "tr" + }, + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "zh-Hans" + }, + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll": { + "locale": "zh-Hant" + } + }, + "contentFiles": { + "contentFiles/any/any/_._": { + "buildAction": "None", + "codeLanguage": "any", + "copyToOutput": false + } + } + }, + "Microsoft.EntityFrameworkCore/10.0.4": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.4", + "Microsoft.EntityFrameworkCore.Analyzers": "10.0.4", + "Microsoft.Extensions.Caching.Memory": "10.0.4", + "Microsoft.Extensions.Logging": "10.0.4" + }, + "compile": { + "lib/net10.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net10.0/Microsoft.EntityFrameworkCore.props": {} + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.4": { + "type": "package", + "compile": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.EntityFrameworkCore.Analyzers/10.0.4": { + "type": "package" + }, + "Microsoft.EntityFrameworkCore.Design/10.0.4": { + "type": "package", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Build.Framework": "18.0.2", + "Microsoft.CodeAnalysis.CSharp": "5.0.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "5.0.0", + "Microsoft.CodeAnalysis.Workspaces.MSBuild": "5.0.0", + "Microsoft.EntityFrameworkCore.Relational": "10.0.4", + "Microsoft.Extensions.Caching.Memory": "10.0.4", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.4", + "Microsoft.Extensions.DependencyModel": "10.0.4", + "Microsoft.Extensions.Logging": "10.0.4", + "Mono.TextTemplating": "3.0.0", + "Newtonsoft.Json": "13.0.3" + }, + "compile": { + "lib/net10.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Design.dll": { + "related": ".xml" + } + }, + "build": { + "build/net10.0/Microsoft.EntityFrameworkCore.Design.props": {} + } + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.4": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore": "10.0.4", + "Microsoft.Extensions.Caching.Memory": "10.0.4", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.4", + "Microsoft.Extensions.Logging": "10.0.4" + }, + "compile": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Caching.Abstractions/10.0.4": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.4" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Caching.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Caching.Memory/10.0.4": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "10.0.4", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.4", + "Microsoft.Extensions.Logging.Abstractions": "10.0.4", + "Microsoft.Extensions.Options": "10.0.4", + "Microsoft.Extensions.Primitives": "10.0.4" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Caching.Memory.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration/10.0.11": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11", + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Configuration.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Configuration.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Abstractions/10.0.11": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Binder/10.0.11": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.11", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Configuration.Binder.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Configuration.Binder.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets": {} + } + }, + "Microsoft.Extensions.DependencyInjection/10.0.4": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.4" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.DependencyInjection.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.11": { + "type": "package", + "compile": { + "lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.DependencyModel/10.0.4": { + "type": "package", + "compile": { + "lib/net10.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.DependencyModel.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Diagnostics/10.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Diagnostics.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Diagnostics.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Diagnostics.Abstractions/10.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", + "Microsoft.Extensions.Options": "10.0.0" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Http/10.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0", + "Microsoft.Extensions.Diagnostics": "10.0.0", + "Microsoft.Extensions.Logging": "10.0.0", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0", + "Microsoft.Extensions.Options": "10.0.0" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Http.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Http.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Logging/10.0.4": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "10.0.4", + "Microsoft.Extensions.Logging.Abstractions": "10.0.4", + "Microsoft.Extensions.Options": "10.0.4" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Logging.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Logging.Abstractions/10.0.4": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.4" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets": {} + } + }, + "Microsoft.Extensions.Options/10.0.11": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.11", + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Options.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/Microsoft.Extensions.Options.targets": {} + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/10.0.11": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11", + "Microsoft.Extensions.Configuration.Binder": "10.0.11", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.11", + "Microsoft.Extensions.Options": "10.0.11", + "Microsoft.Extensions.Primitives": "10.0.11" + }, + "compile": { + "lib/net10.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.Extensions.Primitives/10.0.11": { + "type": "package", + "compile": { + "lib/net10.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "Microsoft.IdentityModel.Abstractions/8.22.0": { + "type": "package", + "compile": { + "lib/net10.0/Microsoft.IdentityModel.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.IdentityModel.JsonWebTokens/8.22.0": { + "type": "package", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.22.0" + }, + "compile": { + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll": { + "related": ".xml" + } + } + }, + "Microsoft.IdentityModel.Logging/8.22.0": { + "type": "package", + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "8.22.0" + }, + "compile": { + "lib/net10.0/Microsoft.IdentityModel.Logging.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Logging.dll": { + "related": ".xml" + } + } + }, + "Microsoft.IdentityModel.Tokens/8.22.0": { + "type": "package", + "dependencies": { + "Microsoft.Bcl.Cryptography": "10.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.IdentityModel.Logging": "8.22.0" + }, + "compile": { + "lib/net10.0/Microsoft.IdentityModel.Tokens.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Microsoft.IdentityModel.Tokens.dll": { + "related": ".xml" + } + } + }, + "Microsoft.VisualStudio.SolutionPersistence/1.0.52": { + "type": "package", + "compile": { + "lib/net8.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.VisualStudio.SolutionPersistence.dll": { + "related": ".xml" + } + } + }, + "Mono.TextTemplating/3.0.0": { + "type": "package", + "dependencies": { + "System.CodeDom": "6.0.0" + }, + "compile": { + "lib/net6.0/_._": {} + }, + "runtime": { + "lib/net6.0/Mono.TextTemplating.dll": {} + }, + "build": { + "buildTransitive/Mono.TextTemplating.targets": {} + } + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "compile": { + "lib/net6.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "Npgsql/10.0.3": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "10.0.0" + }, + "compile": { + "lib/net10.0/Npgsql.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Npgsql.dll": { + "related": ".xml" + } + } + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/10.0.3": { + "type": "package", + "dependencies": { + "Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)", + "Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)", + "Npgsql": "10.0.3" + }, + "compile": { + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": { + "related": ".xml" + } + } + }, + "System.CodeDom/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Composition/9.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "9.0.0", + "System.Composition.Convention": "9.0.0", + "System.Composition.Hosting": "9.0.0", + "System.Composition.Runtime": "9.0.0", + "System.Composition.TypedParts": "9.0.0" + }, + "compile": { + "lib/netcoreapp2.0/_._": {} + }, + "runtime": { + "lib/netcoreapp2.0/_._": {} + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "System.Composition.AttributedModel/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/System.Composition.AttributedModel.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "System.Composition.Convention/9.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "9.0.0" + }, + "compile": { + "lib/net9.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/System.Composition.Convention.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "System.Composition.Hosting/9.0.0": { + "type": "package", + "dependencies": { + "System.Composition.Runtime": "9.0.0" + }, + "compile": { + "lib/net9.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/System.Composition.Hosting.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "System.Composition.Runtime/9.0.0": { + "type": "package", + "compile": { + "lib/net9.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/System.Composition.Runtime.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "System.Composition.TypedParts/9.0.0": { + "type": "package", + "dependencies": { + "System.Composition.AttributedModel": "9.0.0", + "System.Composition.Hosting": "9.0.0", + "System.Composition.Runtime": "9.0.0" + }, + "compile": { + "lib/net9.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/System.Composition.TypedParts.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net8.0/_._": {} + } + }, + "System.IdentityModel.Tokens.Jwt/8.22.0": { + "type": "package", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "8.22.0", + "Microsoft.IdentityModel.Tokens": "8.22.0" + }, + "compile": { + "lib/net10.0/System.IdentityModel.Tokens.Jwt.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net10.0/System.IdentityModel.Tokens.Jwt.dll": { + "related": ".xml" + } + } + }, + "Bookie.Application/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v10.0", + "dependencies": { + "Bookie.Domain": "1.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.11" + }, + "compile": { + "bin/placeholder/Bookie.Application.dll": {} + }, + "runtime": { + "bin/placeholder/Bookie.Application.dll": {} + } + }, + "Bookie.Domain/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v10.0", + "compile": { + "bin/placeholder/Bookie.Domain.dll": {} + }, + "runtime": { + "bin/placeholder/Bookie.Domain.dll": {} + } + } + } + }, + "libraries": { + "Humanizer.Core/2.14.1": { + "sha512": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==", + "type": "package", + "path": "humanizer.core/2.14.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "humanizer.core.2.14.1.nupkg.sha512", + "humanizer.core.nuspec", + "lib/net6.0/Humanizer.dll", + "lib/net6.0/Humanizer.xml", + "lib/netstandard1.0/Humanizer.dll", + "lib/netstandard1.0/Humanizer.xml", + "lib/netstandard2.0/Humanizer.dll", + "lib/netstandard2.0/Humanizer.xml", + "logo.png" + ] + }, + "Microsoft.Bcl.Cryptography/10.0.2": { + "sha512": "LG9Yll3B5aNpxv0+D47g6LiOiKBIlodhcHdQwcYzo8VeexFLGqx5ymetmA2aBRyo9cCcWsQWrFsdbsr8LvmWDw==", + "type": "package", + "path": "microsoft.bcl.cryptography/10.0.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Bcl.Cryptography.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Bcl.Cryptography.targets", + "lib/net10.0/Microsoft.Bcl.Cryptography.dll", + "lib/net10.0/Microsoft.Bcl.Cryptography.xml", + "lib/net462/Microsoft.Bcl.Cryptography.dll", + "lib/net462/Microsoft.Bcl.Cryptography.xml", + "lib/net8.0/Microsoft.Bcl.Cryptography.dll", + "lib/net8.0/Microsoft.Bcl.Cryptography.xml", + "lib/net9.0/Microsoft.Bcl.Cryptography.dll", + "lib/net9.0/Microsoft.Bcl.Cryptography.xml", + "lib/netstandard2.0/Microsoft.Bcl.Cryptography.dll", + "lib/netstandard2.0/Microsoft.Bcl.Cryptography.xml", + "lib/netstandard2.1/Microsoft.Bcl.Cryptography.dll", + "lib/netstandard2.1/Microsoft.Bcl.Cryptography.xml", + "microsoft.bcl.cryptography.10.0.2.nupkg.sha512", + "microsoft.bcl.cryptography.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Build.Framework/18.0.2": { + "sha512": "sOSb+0J4G/jCBW/YqmRuL0eOMXgfw1KQLdC9TkbvfA5xs7uNm+PBQXJCOzSJGXtZcZrtXozcwxPmUiRUbmd7FA==", + "type": "package", + "path": "microsoft.build.framework/18.0.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "README.md", + "lib/net10.0/Microsoft.Build.Framework.dll", + "lib/net10.0/Microsoft.Build.Framework.pdb", + "lib/net10.0/Microsoft.Build.Framework.xml", + "lib/net472/Microsoft.Build.Framework.dll", + "lib/net472/Microsoft.Build.Framework.pdb", + "lib/net472/Microsoft.Build.Framework.xml", + "microsoft.build.framework.18.0.2.nupkg.sha512", + "microsoft.build.framework.nuspec", + "notices/THIRDPARTYNOTICES.txt", + "ref/net10.0/Microsoft.Build.Framework.dll", + "ref/net10.0/Microsoft.Build.Framework.xml", + "ref/net472/Microsoft.Build.Framework.dll", + "ref/net472/Microsoft.Build.Framework.xml", + "ref/netstandard2.0/Microsoft.Build.Framework.dll", + "ref/netstandard2.0/Microsoft.Build.Framework.xml" + ] + }, + "Microsoft.CodeAnalysis.Analyzers/3.11.0": { + "sha512": "v/EW3UE8/lbEYHoC2Qq7AR/DnmvpgdtAMndfQNmpuIMx/Mto8L5JnuCfdBYtgvalQOtfNCnxFejxuRrryvUTsg==", + "type": "package", + "path": "microsoft.codeanalysis.analyzers/3.11.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.txt", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.Analyzers.dll", + "analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.Analyzers.dll", + "analyzers/dotnet/cs/cs/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/de/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/es/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/fr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/it/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ja/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ko/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/pl/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/pt-BR/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/ru/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/tr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hans/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/cs/zh-Hant/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.Analyzers.dll", + "analyzers/dotnet/vb/Microsoft.CodeAnalysis.VisualBasic.Analyzers.dll", + "analyzers/dotnet/vb/cs/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/de/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/es/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/fr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/it/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ja/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ko/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/pl/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/pt-BR/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/ru/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/tr/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hans/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "analyzers/dotnet/vb/zh-Hant/Microsoft.CodeAnalysis.Analyzers.resources.dll", + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.props", + "buildTransitive/Microsoft.CodeAnalysis.Analyzers.targets", + "buildTransitive/config/analysislevel_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevel_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_all.globalconfig", + "buildTransitive/config/analysislevel_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_default.globalconfig", + "buildTransitive/config/analysislevel_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_none.globalconfig", + "buildTransitive/config/analysislevel_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_all.globalconfig", + "buildTransitive/config/analysislevel_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_default.globalconfig", + "buildTransitive/config/analysislevel_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevel_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_none.globalconfig", + "buildTransitive/config/analysislevel_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevel_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevel_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_all.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_default.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_none.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelcorrectness_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_all.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_default.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_none.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevellibrary_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscompatibility_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysiscorrectness_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdesign_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisdocumentation_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysislocalization_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisperformance_4_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_2_9_8_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_4_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_3_recommended_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_all.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_all_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_default.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_default_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_minimum.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_minimum_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_none.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_none_warnaserror.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_recommended.globalconfig", + "buildTransitive/config/analysislevelmicrosoftcodeanalysisreleasetracking_4_3_recommended_warnaserror.globalconfig", + "documentation/Analyzer Configuration.md", + "documentation/Microsoft.CodeAnalysis.Analyzers.md", + "documentation/Microsoft.CodeAnalysis.Analyzers.sarif", + "documentation/readme.md", + "editorconfig/AllRulesDefault/.editorconfig", + "editorconfig/AllRulesDisabled/.editorconfig", + "editorconfig/AllRulesEnabled/.editorconfig", + "editorconfig/CorrectnessRulesDefault/.editorconfig", + "editorconfig/CorrectnessRulesEnabled/.editorconfig", + "editorconfig/DataflowRulesDefault/.editorconfig", + "editorconfig/DataflowRulesEnabled/.editorconfig", + "editorconfig/LibraryRulesDefault/.editorconfig", + "editorconfig/LibraryRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCompatibilityRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCompatibilityRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCorrectnessRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisCorrectnessRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDesignRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDesignRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDocumentationRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisDocumentationRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisLocalizationRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisLocalizationRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisPerformanceRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisPerformanceRulesEnabled/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisReleaseTrackingRulesDefault/.editorconfig", + "editorconfig/MicrosoftCodeAnalysisReleaseTrackingRulesEnabled/.editorconfig", + "editorconfig/PortedFromFxCopRulesDefault/.editorconfig", + "editorconfig/PortedFromFxCopRulesEnabled/.editorconfig", + "microsoft.codeanalysis.analyzers.3.11.0.nupkg.sha512", + "microsoft.codeanalysis.analyzers.nuspec", + "rulesets/AllRulesDefault.ruleset", + "rulesets/AllRulesDisabled.ruleset", + "rulesets/AllRulesEnabled.ruleset", + "rulesets/CorrectnessRulesDefault.ruleset", + "rulesets/CorrectnessRulesEnabled.ruleset", + "rulesets/DataflowRulesDefault.ruleset", + "rulesets/DataflowRulesEnabled.ruleset", + "rulesets/LibraryRulesDefault.ruleset", + "rulesets/LibraryRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisCompatibilityRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisCompatibilityRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisCorrectnessRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisCorrectnessRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisDesignRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisDesignRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisDocumentationRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisDocumentationRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisLocalizationRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisLocalizationRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisPerformanceRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisPerformanceRulesEnabled.ruleset", + "rulesets/MicrosoftCodeAnalysisReleaseTrackingRulesDefault.ruleset", + "rulesets/MicrosoftCodeAnalysisReleaseTrackingRulesEnabled.ruleset", + "rulesets/PortedFromFxCopRulesDefault.ruleset", + "rulesets/PortedFromFxCopRulesEnabled.ruleset", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "Microsoft.CodeAnalysis.Common/5.0.0": { + "sha512": "ZXRAdvH6GiDeHRyd3q/km8Z44RoM6FBWHd+gen/la81mVnAdHTEsEkO5J0TCNXBymAcx5UYKt5TvgKBhaLJEow==", + "type": "package", + "path": "microsoft.codeanalysis.common/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net8.0/Microsoft.CodeAnalysis.dll", + "lib/net8.0/Microsoft.CodeAnalysis.pdb", + "lib/net8.0/Microsoft.CodeAnalysis.xml", + "lib/net8.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/Microsoft.CodeAnalysis.dll", + "lib/net9.0/Microsoft.CodeAnalysis.pdb", + "lib/net9.0/Microsoft.CodeAnalysis.xml", + "lib/net9.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll", + "microsoft.codeanalysis.common.5.0.0.nupkg.sha512", + "microsoft.codeanalysis.common.nuspec" + ] + }, + "Microsoft.CodeAnalysis.CSharp/5.0.0": { + "sha512": "5DSyJ9bk+ATuDy7fp2Zt0mJStDVKbBoiz1DyfAwSa+k4H4IwykAUcV3URelw5b8/iVbfSaOwkwmPUZH6opZKCw==", + "type": "package", + "path": "microsoft.codeanalysis.csharp/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net8.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net8.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/net8.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/net8.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll", + "microsoft.codeanalysis.csharp.5.0.0.nupkg.sha512", + "microsoft.codeanalysis.csharp.nuspec" + ] + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/5.0.0": { + "sha512": "Al/Q8B+yO8odSqGVpSvrShMFDvlQdIBU//F3E6Rb0YdiLSALE9wh/pvozPNnfmh5HDnvU+mkmSjpz4hQO++jaA==", + "type": "package", + "path": "microsoft.codeanalysis.csharp.workspaces/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net8.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/net8.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/net8.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/net8.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/net9.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/net9.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.CSharp.Workspaces.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll", + "microsoft.codeanalysis.csharp.workspaces.5.0.0.nupkg.sha512", + "microsoft.codeanalysis.csharp.workspaces.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Workspaces.Common/5.0.0": { + "sha512": "ZbUmIvT6lqTNKiv06Jl5wf0MTMi1vQ1oH7ou4CLcs2C/no/L7EhP3T8y3XXvn9VbqMcJaJnEsNA1jwYUMgc5jg==", + "type": "package", + "path": "microsoft.codeanalysis.workspaces.common/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "lib/net8.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/net8.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/net8.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/net8.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.dll", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.pdb", + "lib/netstandard2.0/Microsoft.CodeAnalysis.Workspaces.xml", + "lib/netstandard2.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll", + "microsoft.codeanalysis.workspaces.common.5.0.0.nupkg.sha512", + "microsoft.codeanalysis.workspaces.common.nuspec" + ] + }, + "Microsoft.CodeAnalysis.Workspaces.MSBuild/5.0.0": { + "sha512": "/G+LVoAGMz6Ae8nm+PGLxSw+F5RjYx/J7irbTO5uKAPw1bxHyQJLc/YOnpDxt+EpPtYxvC9wvBsg/kETZp1F9Q==", + "type": "package", + "path": "microsoft.codeanalysis.workspaces.msbuild/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "ThirdPartyNotices.rtf", + "contentFiles/any/any/BuildHost-net472/Microsoft.Build.Locator.dll", + "contentFiles/any/any/BuildHost-net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.exe", + "contentFiles/any/any/BuildHost-net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.exe.config", + "contentFiles/any/any/BuildHost-net472/Microsoft.IO.Redist.dll", + "contentFiles/any/any/BuildHost-net472/Newtonsoft.Json.dll", + "contentFiles/any/any/BuildHost-net472/System.Buffers.dll", + "contentFiles/any/any/BuildHost-net472/System.Collections.Immutable.dll", + "contentFiles/any/any/BuildHost-net472/System.CommandLine.dll", + "contentFiles/any/any/BuildHost-net472/System.Memory.dll", + "contentFiles/any/any/BuildHost-net472/System.Numerics.Vectors.dll", + "contentFiles/any/any/BuildHost-net472/System.Runtime.CompilerServices.Unsafe.dll", + "contentFiles/any/any/BuildHost-net472/System.Threading.Tasks.Extensions.dll", + "contentFiles/any/any/BuildHost-net472/cs/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/de/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/es/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/fr/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/it/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/ja/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/ko/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/pl/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/pt-BR/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/ru/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/tr/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/zh-Hans/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-net472/zh-Hant/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/Microsoft.Build.Locator.dll", + "contentFiles/any/any/BuildHost-netcore/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.deps.json", + "contentFiles/any/any/BuildHost-netcore/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll", + "contentFiles/any/any/BuildHost-netcore/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.runtimeconfig.json", + "contentFiles/any/any/BuildHost-netcore/Newtonsoft.Json.dll", + "contentFiles/any/any/BuildHost-netcore/System.Collections.Immutable.dll", + "contentFiles/any/any/BuildHost-netcore/System.CommandLine.dll", + "contentFiles/any/any/BuildHost-netcore/cs/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/de/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/es/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/fr/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/it/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/ja/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/ko/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/pl/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/pt-BR/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/ru/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/tr/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/zh-Hans/System.CommandLine.resources.dll", + "contentFiles/any/any/BuildHost-netcore/zh-Hant/System.CommandLine.resources.dll", + "lib/net472/Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler.dll", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net472/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net472/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net472/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler.dll", + "lib/net8.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net8.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net8.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net8.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net8.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler.dll", + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll", + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.pdb", + "lib/net9.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.xml", + "lib/net9.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "lib/net9.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.resources.dll", + "microsoft.codeanalysis.workspaces.msbuild.5.0.0.nupkg.sha512", + "microsoft.codeanalysis.workspaces.msbuild.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore/10.0.4": { + "sha512": "kzTsfFK2GCytp6DDTfQOmxPU4gbGdrIlP7PxrxF3ESNLtfXrC8BoUVZENBN2WORlZPAD7CVX6AYIglgkpXQooA==", + "type": "package", + "path": "microsoft.entityframeworkcore/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "buildTransitive/net10.0/Microsoft.EntityFrameworkCore.props", + "lib/net10.0/Microsoft.EntityFrameworkCore.dll", + "lib/net10.0/Microsoft.EntityFrameworkCore.xml", + "microsoft.entityframeworkcore.10.0.4.nupkg.sha512", + "microsoft.entityframeworkcore.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Abstractions/10.0.4": { + "sha512": "qDcJqCfN1XYyX0ID/Hd9/kQTRvlia8S+Yuwyl9uFhBIKnOCbl9WMdGQCzbZUKbkpkfvf3P9CDdXsnxHyE3O0Aw==", + "type": "package", + "path": "microsoft.entityframeworkcore.abstractions/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.dll", + "lib/net10.0/Microsoft.EntityFrameworkCore.Abstractions.xml", + "microsoft.entityframeworkcore.abstractions.10.0.4.nupkg.sha512", + "microsoft.entityframeworkcore.abstractions.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Analyzers/10.0.4": { + "sha512": "pQeMHCyD3yTtCEGnHV4VsgKUvrESo3MR5mnh8sgQ1hWYmI1YFsUutDowBIxkobeWRtaRmBqQAtF7XQFW6FWuNA==", + "type": "package", + "path": "microsoft.entityframeworkcore.analyzers/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll", + "docs/PACKAGE.md", + "microsoft.entityframeworkcore.analyzers.10.0.4.nupkg.sha512", + "microsoft.entityframeworkcore.analyzers.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Design/10.0.4": { + "sha512": "FmiUU5xdu1chVxnmsu/mEpCKVQ5+lvIxdP0194lE7HfoU1jO4z/9qnWZpd0kSkVve4gOnRm1lE20kkhlMqJJIg==", + "type": "package", + "path": "microsoft.entityframeworkcore.design/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "build/net10.0/Microsoft.EntityFrameworkCore.Design.props", + "lib/net10.0/Microsoft.EntityFrameworkCore.Design.dll", + "lib/net10.0/Microsoft.EntityFrameworkCore.Design.xml", + "microsoft.entityframeworkcore.design.10.0.4.nupkg.sha512", + "microsoft.entityframeworkcore.design.nuspec" + ] + }, + "Microsoft.EntityFrameworkCore.Relational/10.0.4": { + "sha512": "DOTjTHy93W3TwpMLM4SCm0n57Sc0Jj3+m2S6LSTstKyBB34eT1UouaMS19mpWwvtj42+sRiEjA3+rOTNoNzXFQ==", + "type": "package", + "path": "microsoft.entityframeworkcore.relational/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.dll", + "lib/net10.0/Microsoft.EntityFrameworkCore.Relational.xml", + "microsoft.entityframeworkcore.relational.10.0.4.nupkg.sha512", + "microsoft.entityframeworkcore.relational.nuspec" + ] + }, + "Microsoft.Extensions.Caching.Abstractions/10.0.4": { + "sha512": "uDRooaV6N3WZ0kdlNPMB68/MdGn/in1Fs7Db7DnIm85RBTPy4P321WO+daAImiYpH5dekjNggDqy1N44WaIlMA==", + "type": "package", + "path": "microsoft.extensions.caching.abstractions/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Abstractions.targets", + "lib/net10.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net10.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Abstractions.xml", + "microsoft.extensions.caching.abstractions.10.0.4.nupkg.sha512", + "microsoft.extensions.caching.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Caching.Memory/10.0.4": { + "sha512": "CLLussNUMdSbyJOu4VBF7sqskHGB/5N1EcFzrqG/HsPATN8fCRUcfp0qns1VwkxKHwxrtYCh5FKe+kM81Q1PHA==", + "type": "package", + "path": "microsoft.extensions.caching.memory/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Caching.Memory.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Caching.Memory.targets", + "lib/net10.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net10.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/net462/Microsoft.Extensions.Caching.Memory.dll", + "lib/net462/Microsoft.Extensions.Caching.Memory.xml", + "lib/net8.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net8.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/net9.0/Microsoft.Extensions.Caching.Memory.xml", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.dll", + "lib/netstandard2.0/Microsoft.Extensions.Caching.Memory.xml", + "microsoft.extensions.caching.memory.10.0.4.nupkg.sha512", + "microsoft.extensions.caching.memory.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration/10.0.11": { + "sha512": "wlhRqZW8LcJPa+vk2oLAc/REXDItHtkFQdf/QcXYGZbZOO13izcsKY1pCvuFQYwUiZD+hwSZwsKASjqT+BNaVg==", + "type": "package", + "path": "microsoft.extensions.configuration/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.targets", + "lib/net10.0/Microsoft.Extensions.Configuration.dll", + "lib/net10.0/Microsoft.Extensions.Configuration.xml", + "lib/net462/Microsoft.Extensions.Configuration.dll", + "lib/net462/Microsoft.Extensions.Configuration.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.xml", + "lib/net9.0/Microsoft.Extensions.Configuration.dll", + "lib/net9.0/Microsoft.Extensions.Configuration.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.xml", + "microsoft.extensions.configuration.10.0.11.nupkg.sha512", + "microsoft.extensions.configuration.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Abstractions/10.0.11": { + "sha512": "fVi053xdpda9Em7vSkmgVxO/PtgC2m78ekReKWsgcyskqY0U82Bz/MONwxpGzI0hElYKJfw+fupqMVeKW3fSaA==", + "type": "package", + "path": "microsoft.extensions.configuration.abstractions/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Abstractions.targets", + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net10.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "microsoft.extensions.configuration.abstractions.10.0.11.nupkg.sha512", + "microsoft.extensions.configuration.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Binder/10.0.11": { + "sha512": "rFn8RuszZn3qquPVkDytMUlPc2+rXl9MCoygwc1XmAgC5vg5/oXJ8hkOosOrLoBLsqdTy4lFwP6iQdPS9uSYOA==", + "type": "package", + "path": "microsoft.extensions.configuration.binder/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/cs/Microsoft.Extensions.Configuration.Binder.SourceGeneration.dll", + "analyzers/dotnet/cs/cs/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/de/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/es/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/fr/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/it/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/ja/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/ko/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/pl/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/pt-BR/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/ru/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/tr/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/zh-Hans/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "analyzers/dotnet/cs/zh-Hant/Microsoft.Extensions.Configuration.Binder.SourceGeneration.resources.dll", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.Binder.targets", + "lib/net10.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net10.0/Microsoft.Extensions.Configuration.Binder.xml", + "lib/net462/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net462/Microsoft.Extensions.Configuration.Binder.xml", + "lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net8.0/Microsoft.Extensions.Configuration.Binder.xml", + "lib/net9.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/net9.0/Microsoft.Extensions.Configuration.Binder.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Binder.xml", + "microsoft.extensions.configuration.binder.10.0.11.nupkg.sha512", + "microsoft.extensions.configuration.binder.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection/10.0.4": { + "sha512": "NkvJ8aSr3AG30yabjv7ZWwTG/wq5OElNTlNq39Ok2HSEF3TIwAc1f1xnTJlR/GuoJmEgkfT7WBO9YbSXRk41+g==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets", + "lib/net10.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net10.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/net462/Microsoft.Extensions.DependencyInjection.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", + "microsoft.extensions.dependencyinjection.10.0.4.nupkg.sha512", + "microsoft.extensions.dependencyinjection.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.11": { + "sha512": "/a1aJz4m7ylhEDf25ugQChLQoN5XwoGjWw/BoR/ZWWKsO1v4DdJElS1uyngahz4B/eOzjFk1KNTkarRLE5wsIg==", + "type": "package", + "path": "microsoft.extensions.dependencyinjection.abstractions/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", + "lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net10.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", + "microsoft.extensions.dependencyinjection.abstractions.10.0.11.nupkg.sha512", + "microsoft.extensions.dependencyinjection.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.DependencyModel/10.0.4": { + "sha512": "LiJXylfk8pk+2zsUsITkou3QTFMJ8RNJ0oKKY0Oyjt6HJctGJwPw//ZgoNO4J29zKaT+dR4/PI2jW/znRcspLg==", + "type": "package", + "path": "microsoft.extensions.dependencymodel/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.DependencyModel.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyModel.targets", + "lib/net10.0/Microsoft.Extensions.DependencyModel.dll", + "lib/net10.0/Microsoft.Extensions.DependencyModel.xml", + "lib/net462/Microsoft.Extensions.DependencyModel.dll", + "lib/net462/Microsoft.Extensions.DependencyModel.xml", + "lib/net8.0/Microsoft.Extensions.DependencyModel.dll", + "lib/net8.0/Microsoft.Extensions.DependencyModel.xml", + "lib/net9.0/Microsoft.Extensions.DependencyModel.dll", + "lib/net9.0/Microsoft.Extensions.DependencyModel.xml", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll", + "lib/netstandard2.0/Microsoft.Extensions.DependencyModel.xml", + "microsoft.extensions.dependencymodel.10.0.4.nupkg.sha512", + "microsoft.extensions.dependencymodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Diagnostics/10.0.0": { + "sha512": "xjkxIPgrT0mKTfBwb+CVqZnRchyZgzKIfDQOp8z+WUC6vPe3WokIf71z+hJPkH0YBUYJwa7Z/al1R087ib9oiw==", + "type": "package", + "path": "microsoft.extensions.diagnostics/10.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Diagnostics.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Diagnostics.targets", + "lib/net10.0/Microsoft.Extensions.Diagnostics.dll", + "lib/net10.0/Microsoft.Extensions.Diagnostics.xml", + "lib/net462/Microsoft.Extensions.Diagnostics.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.xml", + "lib/net9.0/Microsoft.Extensions.Diagnostics.dll", + "lib/net9.0/Microsoft.Extensions.Diagnostics.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.xml", + "microsoft.extensions.diagnostics.10.0.0.nupkg.sha512", + "microsoft.extensions.diagnostics.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Diagnostics.Abstractions/10.0.0": { + "sha512": "SfK89ytD61S7DgzorFljSkUeluC1ncn6dtZgwc0ot39f/BEYWBl5jpgvodxduoYAs1d9HG8faCDRZxE95UMo2A==", + "type": "package", + "path": "microsoft.extensions.diagnostics.abstractions/10.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Diagnostics.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Diagnostics.Abstractions.targets", + "lib/net10.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net10.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net462/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "microsoft.extensions.diagnostics.abstractions.10.0.0.nupkg.sha512", + "microsoft.extensions.diagnostics.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Http/10.0.0": { + "sha512": "r+mSvm/Ryc/iYcc9zcUG5VP9EBB8PL1rgVU6macEaYk45vmGRk9PntM3aynFKN6s3Q4WW36kedTycIctctpTUQ==", + "type": "package", + "path": "microsoft.extensions.http/10.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Http.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Http.targets", + "lib/net10.0/Microsoft.Extensions.Http.dll", + "lib/net10.0/Microsoft.Extensions.Http.xml", + "lib/net462/Microsoft.Extensions.Http.dll", + "lib/net462/Microsoft.Extensions.Http.xml", + "lib/net8.0/Microsoft.Extensions.Http.dll", + "lib/net8.0/Microsoft.Extensions.Http.xml", + "lib/net9.0/Microsoft.Extensions.Http.dll", + "lib/net9.0/Microsoft.Extensions.Http.xml", + "lib/netstandard2.0/Microsoft.Extensions.Http.dll", + "lib/netstandard2.0/Microsoft.Extensions.Http.xml", + "microsoft.extensions.http.10.0.0.nupkg.sha512", + "microsoft.extensions.http.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging/10.0.4": { + "sha512": "S8+6fCuMOhJZGk8sGFtOy3VsF9mk9x4UOL59GM91REiA/fmCDjunKKIw4RmStG87qyXPfxelDJf2pXIbTuaBdw==", + "type": "package", + "path": "microsoft.extensions.logging/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Logging.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.targets", + "lib/net10.0/Microsoft.Extensions.Logging.dll", + "lib/net10.0/Microsoft.Extensions.Logging.xml", + "lib/net462/Microsoft.Extensions.Logging.dll", + "lib/net462/Microsoft.Extensions.Logging.xml", + "lib/net8.0/Microsoft.Extensions.Logging.dll", + "lib/net8.0/Microsoft.Extensions.Logging.xml", + "lib/net9.0/Microsoft.Extensions.Logging.dll", + "lib/net9.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.xml", + "lib/netstandard2.1/Microsoft.Extensions.Logging.dll", + "lib/netstandard2.1/Microsoft.Extensions.Logging.xml", + "microsoft.extensions.logging.10.0.4.nupkg.sha512", + "microsoft.extensions.logging.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Logging.Abstractions/10.0.4": { + "sha512": "PDMMt7fvBatv6hcxxyJtXIzSwn7Dy00W6I2vDAOTYrQqNM2dF5A2L9n0uMzdPz2IPoNZWkAmYjoOCEdDLq0i4w==", + "type": "package", + "path": "microsoft.extensions.logging.abstractions/10.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/net8.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets", + "lib/net10.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net10.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", + "microsoft.extensions.logging.abstractions.10.0.4.nupkg.sha512", + "microsoft.extensions.logging.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Options/10.0.11": { + "sha512": "eY1GAKcTfD2maP27J84X9IovT3yjHJ2dVDzPmDg6/XqYvt3jMzJhtfQCLjG9pVsZGAd+8DQ2QrjaDcs2+VQLGw==", + "type": "package", + "path": "microsoft.extensions.options/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Options.SourceGeneration.resources.dll", + "buildTransitive/net461/Microsoft.Extensions.Options.targets", + "buildTransitive/net462/Microsoft.Extensions.Options.targets", + "buildTransitive/net8.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Options.targets", + "lib/net10.0/Microsoft.Extensions.Options.dll", + "lib/net10.0/Microsoft.Extensions.Options.xml", + "lib/net462/Microsoft.Extensions.Options.dll", + "lib/net462/Microsoft.Extensions.Options.xml", + "lib/net8.0/Microsoft.Extensions.Options.dll", + "lib/net8.0/Microsoft.Extensions.Options.xml", + "lib/net9.0/Microsoft.Extensions.Options.dll", + "lib/net9.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.xml", + "lib/netstandard2.1/Microsoft.Extensions.Options.dll", + "lib/netstandard2.1/Microsoft.Extensions.Options.xml", + "microsoft.extensions.options.10.0.11.nupkg.sha512", + "microsoft.extensions.options.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Options.ConfigurationExtensions/10.0.11": { + "sha512": "syEhXQ/sEaSBFaqzlp9gDGHX/nk6gkQkh1sIUpBO1mlBj3Phu1rmb4ML1uCiyPW9N6Kxfxv3y5FGObC+bV01Qw==", + "type": "package", + "path": "microsoft.extensions.options.configurationextensions/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Options.ConfigurationExtensions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Options.ConfigurationExtensions.targets", + "lib/net10.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net10.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/net462/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net462/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/net9.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/net9.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Options.ConfigurationExtensions.xml", + "microsoft.extensions.options.configurationextensions.10.0.11.nupkg.sha512", + "microsoft.extensions.options.configurationextensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Primitives/10.0.11": { + "sha512": "SXcz+kF+4Oo9b1+55zntpJFYfwb1jw66ioxptyNOOTDc8g2FHnBFWjZpsWfCvZIhzr0x+4e2trVTs4OKwQfBtw==", + "type": "package", + "path": "microsoft.extensions.primitives/10.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", + "lib/net10.0/Microsoft.Extensions.Primitives.dll", + "lib/net10.0/Microsoft.Extensions.Primitives.xml", + "lib/net462/Microsoft.Extensions.Primitives.dll", + "lib/net462/Microsoft.Extensions.Primitives.xml", + "lib/net8.0/Microsoft.Extensions.Primitives.dll", + "lib/net8.0/Microsoft.Extensions.Primitives.xml", + "lib/net9.0/Microsoft.Extensions.Primitives.dll", + "lib/net9.0/Microsoft.Extensions.Primitives.xml", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", + "microsoft.extensions.primitives.10.0.11.nupkg.sha512", + "microsoft.extensions.primitives.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.IdentityModel.Abstractions/8.22.0": { + "sha512": "LU3V3owsu4vGpCg2kyL7SsQEuHwcoJ8FSNBqzLADzCf3/PcKUTcx5Plsd51DoTJMfK/WigXV/03UhaN5JXE6uQ==", + "type": "package", + "path": "microsoft.identitymodel.abstractions/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/net10.0/Microsoft.IdentityModel.Abstractions.xml", + "lib/net462/Microsoft.IdentityModel.Abstractions.dll", + "lib/net462/Microsoft.IdentityModel.Abstractions.xml", + "lib/net472/Microsoft.IdentityModel.Abstractions.dll", + "lib/net472/Microsoft.IdentityModel.Abstractions.xml", + "lib/net6.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/net6.0/Microsoft.IdentityModel.Abstractions.xml", + "lib/net8.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/net8.0/Microsoft.IdentityModel.Abstractions.xml", + "lib/net9.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/net9.0/Microsoft.IdentityModel.Abstractions.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.xml", + "microsoft.identitymodel.abstractions.8.22.0.nupkg.sha512", + "microsoft.identitymodel.abstractions.nuspec" + ] + }, + "Microsoft.IdentityModel.JsonWebTokens/8.22.0": { + "sha512": "kv6peMLjALZLDAy2H3F77KjVRdwiscn2p/g3ui2chcbuEcAX2MpAbyDcYnJ7Vyh8jZ1aJWrniUMCDWoOgnu4NQ==", + "type": "package", + "path": "microsoft.identitymodel.jsonwebtokens/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net10.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net462/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net462/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net472/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net472/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.JsonWebTokens.xml", + "microsoft.identitymodel.jsonwebtokens.8.22.0.nupkg.sha512", + "microsoft.identitymodel.jsonwebtokens.nuspec" + ] + }, + "Microsoft.IdentityModel.Logging/8.22.0": { + "sha512": "G9Tl0yXSlr2pkXv4EpXjO16M4q6oo9N/od+gNyOusZ8yM8LZg1H3f/QOMFuOJiV6znzY5MkAREU97JRRnqpEQw==", + "type": "package", + "path": "microsoft.identitymodel.logging/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.Logging.dll", + "lib/net10.0/Microsoft.IdentityModel.Logging.xml", + "lib/net462/Microsoft.IdentityModel.Logging.dll", + "lib/net462/Microsoft.IdentityModel.Logging.xml", + "lib/net472/Microsoft.IdentityModel.Logging.dll", + "lib/net472/Microsoft.IdentityModel.Logging.xml", + "lib/net6.0/Microsoft.IdentityModel.Logging.dll", + "lib/net6.0/Microsoft.IdentityModel.Logging.xml", + "lib/net8.0/Microsoft.IdentityModel.Logging.dll", + "lib/net8.0/Microsoft.IdentityModel.Logging.xml", + "lib/net9.0/Microsoft.IdentityModel.Logging.dll", + "lib/net9.0/Microsoft.IdentityModel.Logging.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.Logging.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.Logging.xml", + "microsoft.identitymodel.logging.8.22.0.nupkg.sha512", + "microsoft.identitymodel.logging.nuspec" + ] + }, + "Microsoft.IdentityModel.Tokens/8.22.0": { + "sha512": "i4lywKKUuVmheCUA+w/q8QNPReNI0qanHI9hhz48AFqD1ljyb8sxPL2RbXOGiPV13XdJ4kxieL9ukS7tD43LxA==", + "type": "package", + "path": "microsoft.identitymodel.tokens/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Microsoft.IdentityModel.Tokens.dll", + "lib/net10.0/Microsoft.IdentityModel.Tokens.xml", + "lib/net462/Microsoft.IdentityModel.Tokens.dll", + "lib/net462/Microsoft.IdentityModel.Tokens.xml", + "lib/net472/Microsoft.IdentityModel.Tokens.dll", + "lib/net472/Microsoft.IdentityModel.Tokens.xml", + "lib/net6.0/Microsoft.IdentityModel.Tokens.dll", + "lib/net6.0/Microsoft.IdentityModel.Tokens.xml", + "lib/net8.0/Microsoft.IdentityModel.Tokens.dll", + "lib/net8.0/Microsoft.IdentityModel.Tokens.xml", + "lib/net9.0/Microsoft.IdentityModel.Tokens.dll", + "lib/net9.0/Microsoft.IdentityModel.Tokens.xml", + "lib/netstandard2.0/Microsoft.IdentityModel.Tokens.dll", + "lib/netstandard2.0/Microsoft.IdentityModel.Tokens.xml", + "microsoft.identitymodel.tokens.8.22.0.nupkg.sha512", + "microsoft.identitymodel.tokens.nuspec" + ] + }, + "Microsoft.VisualStudio.SolutionPersistence/1.0.52": { + "sha512": "oNv2JtYXhpdJrX63nibx1JT3uCESOBQ1LAk7Dtz/sr0+laW0KRM6eKp4CZ3MHDR2siIkKsY8MmUkeP5DKkQQ5w==", + "type": "package", + "path": "microsoft.visualstudio.solutionpersistence/1.0.52", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NOTICE", + "lib/net472/Microsoft.VisualStudio.SolutionPersistence.dll", + "lib/net472/Microsoft.VisualStudio.SolutionPersistence.xml", + "lib/net472/manifest.spdx.json", + "lib/net8.0/Microsoft.VisualStudio.SolutionPersistence.dll", + "lib/net8.0/Microsoft.VisualStudio.SolutionPersistence.xml", + "lib/net8.0/manifest.spdx.json", + "microsoft.visualstudio.solutionpersistence.1.0.52.nupkg.sha512", + "microsoft.visualstudio.solutionpersistence.nuspec" + ] + }, + "Mono.TextTemplating/3.0.0": { + "sha512": "YqueG52R/Xej4VVbKuRIodjiAhV0HR/XVbLbNrJhCZnzjnSjgMJ/dCdV0akQQxavX6hp/LC6rqLGLcXeQYU7XA==", + "type": "package", + "path": "mono.texttemplating/3.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt/LICENSE", + "buildTransitive/Mono.TextTemplating.targets", + "lib/net472/Mono.TextTemplating.dll", + "lib/net6.0/Mono.TextTemplating.dll", + "lib/netstandard2.0/Mono.TextTemplating.dll", + "mono.texttemplating.3.0.0.nupkg.sha512", + "mono.texttemplating.nuspec", + "readme.md" + ] + }, + "Newtonsoft.Json/13.0.3": { + "sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==", + "type": "package", + "path": "newtonsoft.json/13.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "README.md", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/net6.0/Newtonsoft.Json.dll", + "lib/net6.0/Newtonsoft.Json.xml", + "lib/netstandard1.0/Newtonsoft.Json.dll", + "lib/netstandard1.0/Newtonsoft.Json.xml", + "lib/netstandard1.3/Newtonsoft.Json.dll", + "lib/netstandard1.3/Newtonsoft.Json.xml", + "lib/netstandard2.0/Newtonsoft.Json.dll", + "lib/netstandard2.0/Newtonsoft.Json.xml", + "newtonsoft.json.13.0.3.nupkg.sha512", + "newtonsoft.json.nuspec", + "packageIcon.png" + ] + }, + "Npgsql/10.0.3": { + "sha512": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==", + "type": "package", + "path": "npgsql/10.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Npgsql.dll", + "lib/net10.0/Npgsql.xml", + "lib/net8.0/Npgsql.dll", + "lib/net8.0/Npgsql.xml", + "lib/net9.0/Npgsql.dll", + "lib/net9.0/Npgsql.xml", + "npgsql.10.0.3.nupkg.sha512", + "npgsql.nuspec", + "postgresql.png" + ] + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/10.0.3": { + "sha512": "IPGrrZnRkuW7OlHDhUESZz4G5DLkW7Nej/O3Cx+0iTsgyU5XJxBgpsvTHLloo3WWuAKKbDHXBvWPVkX1deRh1Q==", + "type": "package", + "path": "npgsql.entityframeworkcore.postgresql/10.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll", + "lib/net10.0/Npgsql.EntityFrameworkCore.PostgreSQL.xml", + "npgsql.entityframeworkcore.postgresql.10.0.3.nupkg.sha512", + "npgsql.entityframeworkcore.postgresql.nuspec", + "postgresql.png" + ] + }, + "System.CodeDom/6.0.0": { + "sha512": "CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==", + "type": "package", + "path": "system.codedom/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.CodeDom.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.CodeDom.dll", + "lib/net461/System.CodeDom.xml", + "lib/net6.0/System.CodeDom.dll", + "lib/net6.0/System.CodeDom.xml", + "lib/netstandard2.0/System.CodeDom.dll", + "lib/netstandard2.0/System.CodeDom.xml", + "system.codedom.6.0.0.nupkg.sha512", + "system.codedom.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition/9.0.0": { + "sha512": "3Djj70fFTraOarSKmRnmRy/zm4YurICm+kiCtI0dYRqGJnLX6nJ+G3WYuFJ173cAPax/gh96REcbNiVqcrypFQ==", + "type": "package", + "path": "system.composition/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.targets", + "lib/net461/_._", + "lib/netcoreapp2.0/_._", + "lib/netstandard2.0/_._", + "system.composition.9.0.0.nupkg.sha512", + "system.composition.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.AttributedModel/9.0.0": { + "sha512": "iri00l/zIX9g4lHMY+Nz0qV1n40+jFYAmgsaiNn16xvt2RDwlqByNG4wgblagnDYxm3YSQQ0jLlC/7Xlk9CzyA==", + "type": "package", + "path": "system.composition.attributedmodel/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.AttributedModel.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.AttributedModel.targets", + "lib/net462/System.Composition.AttributedModel.dll", + "lib/net462/System.Composition.AttributedModel.xml", + "lib/net8.0/System.Composition.AttributedModel.dll", + "lib/net8.0/System.Composition.AttributedModel.xml", + "lib/net9.0/System.Composition.AttributedModel.dll", + "lib/net9.0/System.Composition.AttributedModel.xml", + "lib/netstandard2.0/System.Composition.AttributedModel.dll", + "lib/netstandard2.0/System.Composition.AttributedModel.xml", + "system.composition.attributedmodel.9.0.0.nupkg.sha512", + "system.composition.attributedmodel.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Convention/9.0.0": { + "sha512": "+vuqVP6xpi582XIjJi6OCsIxuoTZfR0M7WWufk3uGDeCl3wGW6KnpylUJ3iiXdPByPE0vR5TjJgR6hDLez4FQg==", + "type": "package", + "path": "system.composition.convention/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Convention.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Convention.targets", + "lib/net462/System.Composition.Convention.dll", + "lib/net462/System.Composition.Convention.xml", + "lib/net8.0/System.Composition.Convention.dll", + "lib/net8.0/System.Composition.Convention.xml", + "lib/net9.0/System.Composition.Convention.dll", + "lib/net9.0/System.Composition.Convention.xml", + "lib/netstandard2.0/System.Composition.Convention.dll", + "lib/netstandard2.0/System.Composition.Convention.xml", + "system.composition.convention.9.0.0.nupkg.sha512", + "system.composition.convention.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Hosting/9.0.0": { + "sha512": "OFqSeFeJYr7kHxDfaViGM1ymk7d4JxK//VSoNF9Ux0gpqkLsauDZpu89kTHHNdCWfSljbFcvAafGyBoY094btQ==", + "type": "package", + "path": "system.composition.hosting/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Hosting.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Hosting.targets", + "lib/net462/System.Composition.Hosting.dll", + "lib/net462/System.Composition.Hosting.xml", + "lib/net8.0/System.Composition.Hosting.dll", + "lib/net8.0/System.Composition.Hosting.xml", + "lib/net9.0/System.Composition.Hosting.dll", + "lib/net9.0/System.Composition.Hosting.xml", + "lib/netstandard2.0/System.Composition.Hosting.dll", + "lib/netstandard2.0/System.Composition.Hosting.xml", + "system.composition.hosting.9.0.0.nupkg.sha512", + "system.composition.hosting.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.Runtime/9.0.0": { + "sha512": "w1HOlQY1zsOWYussjFGZCEYF2UZXgvoYnS94NIu2CBnAGMbXFAX8PY8c92KwUItPmowal68jnVLBCzdrWLeEKA==", + "type": "package", + "path": "system.composition.runtime/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.Runtime.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.Runtime.targets", + "lib/net462/System.Composition.Runtime.dll", + "lib/net462/System.Composition.Runtime.xml", + "lib/net8.0/System.Composition.Runtime.dll", + "lib/net8.0/System.Composition.Runtime.xml", + "lib/net9.0/System.Composition.Runtime.dll", + "lib/net9.0/System.Composition.Runtime.xml", + "lib/netstandard2.0/System.Composition.Runtime.dll", + "lib/netstandard2.0/System.Composition.Runtime.xml", + "system.composition.runtime.9.0.0.nupkg.sha512", + "system.composition.runtime.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Composition.TypedParts/9.0.0": { + "sha512": "aRZlojCCGEHDKqh43jaDgaVpYETsgd7Nx4g1zwLKMtv4iTo0627715ajEFNpEEBTgLmvZuv8K0EVxc3sM4NWJA==", + "type": "package", + "path": "system.composition.typedparts/9.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Composition.TypedParts.targets", + "buildTransitive/net462/_._", + "buildTransitive/net8.0/_._", + "buildTransitive/netcoreapp2.0/System.Composition.TypedParts.targets", + "lib/net462/System.Composition.TypedParts.dll", + "lib/net462/System.Composition.TypedParts.xml", + "lib/net8.0/System.Composition.TypedParts.dll", + "lib/net8.0/System.Composition.TypedParts.xml", + "lib/net9.0/System.Composition.TypedParts.dll", + "lib/net9.0/System.Composition.TypedParts.xml", + "lib/netstandard2.0/System.Composition.TypedParts.dll", + "lib/netstandard2.0/System.Composition.TypedParts.xml", + "system.composition.typedparts.9.0.0.nupkg.sha512", + "system.composition.typedparts.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.IdentityModel.Tokens.Jwt/8.22.0": { + "sha512": "CpXGfNhLl6EgYaOC9XYsc1p7Ci9HtAy0soHJDSBNGse647al4tTq9RDr+LQsrF4Ls79Dx7VfzN34km0W4DWPow==", + "type": "package", + "path": "system.identitymodel.tokens.jwt/8.22.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/net10.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/net10.0/System.IdentityModel.Tokens.Jwt.xml", + "lib/net462/System.IdentityModel.Tokens.Jwt.dll", + "lib/net462/System.IdentityModel.Tokens.Jwt.xml", + "lib/net472/System.IdentityModel.Tokens.Jwt.dll", + "lib/net472/System.IdentityModel.Tokens.Jwt.xml", + "lib/net6.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/net6.0/System.IdentityModel.Tokens.Jwt.xml", + "lib/net8.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/net8.0/System.IdentityModel.Tokens.Jwt.xml", + "lib/net9.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/net9.0/System.IdentityModel.Tokens.Jwt.xml", + "lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.dll", + "lib/netstandard2.0/System.IdentityModel.Tokens.Jwt.xml", + "system.identitymodel.tokens.jwt.8.22.0.nupkg.sha512", + "system.identitymodel.tokens.jwt.nuspec" + ] + }, + "Bookie.Application/1.0.0": { + "type": "project", + "path": "../Bookie.Application/Bookie.Application.csproj", + "msbuildProject": "../Bookie.Application/Bookie.Application.csproj" + }, + "Bookie.Domain/1.0.0": { + "type": "project", + "path": "../Bookie.Domain/Bookie.Domain.csproj", + "msbuildProject": "../Bookie.Domain/Bookie.Domain.csproj" + } + }, + "projectFileDependencyGroups": { + "net10.0": [ + "Bookie.Application >= 1.0.0", + "Bookie.Domain >= 1.0.0", + "Microsoft.EntityFrameworkCore.Design >= 10.0.4", + "Microsoft.Extensions.Configuration.Abstractions >= 10.0.11", + "Microsoft.Extensions.Http >= 10.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions >= 10.0.11", + "Npgsql.EntityFrameworkCore.PostgreSQL >= 10.0.3", + "System.IdentityModel.Tokens.Jwt >= 8.22.0" + ] + }, + "packageFolders": { + "/Users/piotrkus/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj", + "projectName": "Bookie.Infrastructure", + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj", + "packagesPath": "/Users/piotrkus/.nuget/packages/", + "outputPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/NuGet.Config", + "/Users/piotrkus/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net10.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "projectReferences": { + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj" + }, + "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj": { + "projectPath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "all" + }, + "SdkAnalysisLevel": "10.0.200" + }, + "frameworks": { + "net10.0": { + "targetAlias": "net10.0", + "dependencies": { + "Microsoft.EntityFrameworkCore.Design": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[10.0.4, )" + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "target": "Package", + "version": "[10.0.11, )" + }, + "Microsoft.Extensions.Http": { + "target": "Package", + "version": "[10.0.0, )" + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "target": "Package", + "version": "[10.0.11, )" + }, + "Npgsql.EntityFrameworkCore.PostgreSQL": { + "target": "Package", + "version": "[10.0.3, )" + }, + "System.IdentityModel.Tokens.Jwt": { + "target": "Package", + "version": "[8.22.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json", + "packagesToPrune": { + "Microsoft.CSharp": "(,4.7.32767]", + "Microsoft.VisualBasic": "(,10.4.32767]", + "Microsoft.Win32.Primitives": "(,4.3.32767]", + "Microsoft.Win32.Registry": "(,5.0.32767]", + "runtime.any.System.Collections": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.any.System.Globalization": "(,4.3.32767]", + "runtime.any.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.any.System.IO": "(,4.3.32767]", + "runtime.any.System.Reflection": "(,4.3.32767]", + "runtime.any.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.any.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.any.System.Runtime": "(,4.3.32767]", + "runtime.any.System.Runtime.Handles": "(,4.3.32767]", + "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.any.System.Text.Encoding": "(,4.3.32767]", + "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.any.System.Threading.Tasks": "(,4.3.32767]", + "runtime.any.System.Threading.Timer": "(,4.3.32767]", + "runtime.aot.System.Collections": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]", + "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]", + "runtime.aot.System.Globalization": "(,4.3.32767]", + "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]", + "runtime.aot.System.IO": "(,4.3.32767]", + "runtime.aot.System.Reflection": "(,4.3.32767]", + "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]", + "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]", + "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]", + "runtime.aot.System.Runtime": "(,4.3.32767]", + "runtime.aot.System.Runtime.Handles": "(,4.3.32767]", + "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding": "(,4.3.32767]", + "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]", + "runtime.aot.System.Threading.Tasks": "(,4.3.32767]", + "runtime.aot.System.Threading.Timer": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]", + "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]", + "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.unix.System.Console": "(,4.3.32767]", + "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.unix.System.IO.FileSystem": "(,4.3.32767]", + "runtime.unix.System.Net.Primitives": "(,4.3.32767]", + "runtime.unix.System.Net.Sockets": "(,4.3.32767]", + "runtime.unix.System.Private.Uri": "(,4.3.32767]", + "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]", + "runtime.win.System.Console": "(,4.3.32767]", + "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]", + "runtime.win.System.IO.FileSystem": "(,4.3.32767]", + "runtime.win.System.Net.Primitives": "(,4.3.32767]", + "runtime.win.System.Net.Sockets": "(,4.3.32767]", + "runtime.win.System.Runtime.Extensions": "(,4.3.32767]", + "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]", + "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]", + "runtime.win7.System.Private.Uri": "(,4.3.32767]", + "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]", + "System.AppContext": "(,4.3.32767]", + "System.Buffers": "(,5.0.32767]", + "System.Collections": "(,4.3.32767]", + "System.Collections.Concurrent": "(,4.3.32767]", + "System.Collections.Immutable": "(,10.0.32767]", + "System.Collections.NonGeneric": "(,4.3.32767]", + "System.Collections.Specialized": "(,4.3.32767]", + "System.ComponentModel": "(,4.3.32767]", + "System.ComponentModel.Annotations": "(,4.3.32767]", + "System.ComponentModel.EventBasedAsync": "(,4.3.32767]", + "System.ComponentModel.Primitives": "(,4.3.32767]", + "System.ComponentModel.TypeConverter": "(,4.3.32767]", + "System.Console": "(,4.3.32767]", + "System.Data.Common": "(,4.3.32767]", + "System.Data.DataSetExtensions": "(,4.4.32767]", + "System.Diagnostics.Contracts": "(,4.3.32767]", + "System.Diagnostics.Debug": "(,4.3.32767]", + "System.Diagnostics.DiagnosticSource": "(,10.0.32767]", + "System.Diagnostics.FileVersionInfo": "(,4.3.32767]", + "System.Diagnostics.Process": "(,4.3.32767]", + "System.Diagnostics.StackTrace": "(,4.3.32767]", + "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]", + "System.Diagnostics.Tools": "(,4.3.32767]", + "System.Diagnostics.TraceSource": "(,4.3.32767]", + "System.Diagnostics.Tracing": "(,4.3.32767]", + "System.Drawing.Primitives": "(,4.3.32767]", + "System.Dynamic.Runtime": "(,4.3.32767]", + "System.Formats.Asn1": "(,10.0.32767]", + "System.Formats.Tar": "(,10.0.32767]", + "System.Globalization": "(,4.3.32767]", + "System.Globalization.Calendars": "(,4.3.32767]", + "System.Globalization.Extensions": "(,4.3.32767]", + "System.IO": "(,4.3.32767]", + "System.IO.Compression": "(,4.3.32767]", + "System.IO.Compression.ZipFile": "(,4.3.32767]", + "System.IO.FileSystem": "(,4.3.32767]", + "System.IO.FileSystem.AccessControl": "(,4.4.32767]", + "System.IO.FileSystem.DriveInfo": "(,4.3.32767]", + "System.IO.FileSystem.Primitives": "(,4.3.32767]", + "System.IO.FileSystem.Watcher": "(,4.3.32767]", + "System.IO.IsolatedStorage": "(,4.3.32767]", + "System.IO.MemoryMappedFiles": "(,4.3.32767]", + "System.IO.Pipelines": "(,10.0.32767]", + "System.IO.Pipes": "(,4.3.32767]", + "System.IO.Pipes.AccessControl": "(,5.0.32767]", + "System.IO.UnmanagedMemoryStream": "(,4.3.32767]", + "System.Linq": "(,4.3.32767]", + "System.Linq.AsyncEnumerable": "(,10.0.32767]", + "System.Linq.Expressions": "(,4.3.32767]", + "System.Linq.Parallel": "(,4.3.32767]", + "System.Linq.Queryable": "(,4.3.32767]", + "System.Memory": "(,5.0.32767]", + "System.Net.Http": "(,4.3.32767]", + "System.Net.Http.Json": "(,10.0.32767]", + "System.Net.NameResolution": "(,4.3.32767]", + "System.Net.NetworkInformation": "(,4.3.32767]", + "System.Net.Ping": "(,4.3.32767]", + "System.Net.Primitives": "(,4.3.32767]", + "System.Net.Requests": "(,4.3.32767]", + "System.Net.Security": "(,4.3.32767]", + "System.Net.ServerSentEvents": "(,10.0.32767]", + "System.Net.Sockets": "(,4.3.32767]", + "System.Net.WebHeaderCollection": "(,4.3.32767]", + "System.Net.WebSockets": "(,4.3.32767]", + "System.Net.WebSockets.Client": "(,4.3.32767]", + "System.Numerics.Vectors": "(,5.0.32767]", + "System.ObjectModel": "(,4.3.32767]", + "System.Private.DataContractSerialization": "(,4.3.32767]", + "System.Private.Uri": "(,4.3.32767]", + "System.Reflection": "(,4.3.32767]", + "System.Reflection.DispatchProxy": "(,6.0.32767]", + "System.Reflection.Emit": "(,4.7.32767]", + "System.Reflection.Emit.ILGeneration": "(,4.7.32767]", + "System.Reflection.Emit.Lightweight": "(,4.7.32767]", + "System.Reflection.Extensions": "(,4.3.32767]", + "System.Reflection.Metadata": "(,10.0.32767]", + "System.Reflection.Primitives": "(,4.3.32767]", + "System.Reflection.TypeExtensions": "(,4.3.32767]", + "System.Resources.Reader": "(,4.3.32767]", + "System.Resources.ResourceManager": "(,4.3.32767]", + "System.Resources.Writer": "(,4.3.32767]", + "System.Runtime": "(,4.3.32767]", + "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]", + "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]", + "System.Runtime.Extensions": "(,4.3.32767]", + "System.Runtime.Handles": "(,4.3.32767]", + "System.Runtime.InteropServices": "(,4.3.32767]", + "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]", + "System.Runtime.Loader": "(,4.3.32767]", + "System.Runtime.Numerics": "(,4.3.32767]", + "System.Runtime.Serialization.Formatters": "(,4.3.32767]", + "System.Runtime.Serialization.Json": "(,4.3.32767]", + "System.Runtime.Serialization.Primitives": "(,4.3.32767]", + "System.Runtime.Serialization.Xml": "(,4.3.32767]", + "System.Security.AccessControl": "(,6.0.32767]", + "System.Security.Claims": "(,4.3.32767]", + "System.Security.Cryptography.Algorithms": "(,4.3.32767]", + "System.Security.Cryptography.Cng": "(,5.0.32767]", + "System.Security.Cryptography.Csp": "(,4.3.32767]", + "System.Security.Cryptography.Encoding": "(,4.3.32767]", + "System.Security.Cryptography.OpenSsl": "(,5.0.32767]", + "System.Security.Cryptography.Primitives": "(,4.3.32767]", + "System.Security.Cryptography.X509Certificates": "(,4.3.32767]", + "System.Security.Principal": "(,4.3.32767]", + "System.Security.Principal.Windows": "(,5.0.32767]", + "System.Security.SecureString": "(,4.3.32767]", + "System.Text.Encoding": "(,4.3.32767]", + "System.Text.Encoding.CodePages": "(,10.0.32767]", + "System.Text.Encoding.Extensions": "(,4.3.32767]", + "System.Text.Encodings.Web": "(,10.0.32767]", + "System.Text.Json": "(,10.0.32767]", + "System.Text.RegularExpressions": "(,4.3.32767]", + "System.Threading": "(,4.3.32767]", + "System.Threading.AccessControl": "(,10.0.32767]", + "System.Threading.Channels": "(,10.0.32767]", + "System.Threading.Overlapped": "(,4.3.32767]", + "System.Threading.Tasks": "(,4.3.32767]", + "System.Threading.Tasks.Dataflow": "(,10.0.32767]", + "System.Threading.Tasks.Extensions": "(,5.0.32767]", + "System.Threading.Tasks.Parallel": "(,4.3.32767]", + "System.Threading.Thread": "(,4.3.32767]", + "System.Threading.ThreadPool": "(,4.3.32767]", + "System.Threading.Timer": "(,4.3.32767]", + "System.ValueTuple": "(,4.5.32767]", + "System.Xml.ReaderWriter": "(,4.3.32767]", + "System.Xml.XDocument": "(,4.3.32767]", + "System.Xml.XmlDocument": "(,4.3.32767]", + "System.Xml.XmlSerializer": "(,4.3.32767]", + "System.Xml.XPath": "(,4.3.32767]", + "System.Xml.XPath.XDocument": "(,5.0.32767]" + } + } + } + } +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/obj/project.nuget.cache b/BookieApi/src/Bookie.Infrastructure/obj/project.nuget.cache new file mode 100644 index 0000000..081853b --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/project.nuget.cache @@ -0,0 +1,56 @@ +{ + "version": 2, + "dgSpecHash": "PAmDteJFN8g=", + "success": true, + "projectFilePath": "/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj", + "expectedPackageFiles": [ + "/Users/piotrkus/.nuget/packages/humanizer.core/2.14.1/humanizer.core.2.14.1.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.bcl.cryptography/10.0.2/microsoft.bcl.cryptography.10.0.2.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.build.framework/18.0.2/microsoft.build.framework.18.0.2.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.codeanalysis.analyzers/3.11.0/microsoft.codeanalysis.analyzers.3.11.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.codeanalysis.common/5.0.0/microsoft.codeanalysis.common.5.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.codeanalysis.csharp/5.0.0/microsoft.codeanalysis.csharp.5.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.codeanalysis.csharp.workspaces/5.0.0/microsoft.codeanalysis.csharp.workspaces.5.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.codeanalysis.workspaces.common/5.0.0/microsoft.codeanalysis.workspaces.common.5.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.codeanalysis.workspaces.msbuild/5.0.0/microsoft.codeanalysis.workspaces.msbuild.5.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.entityframeworkcore/10.0.4/microsoft.entityframeworkcore.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.entityframeworkcore.abstractions/10.0.4/microsoft.entityframeworkcore.abstractions.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.entityframeworkcore.analyzers/10.0.4/microsoft.entityframeworkcore.analyzers.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.entityframeworkcore.design/10.0.4/microsoft.entityframeworkcore.design.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.entityframeworkcore.relational/10.0.4/microsoft.entityframeworkcore.relational.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.caching.abstractions/10.0.4/microsoft.extensions.caching.abstractions.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.caching.memory/10.0.4/microsoft.extensions.caching.memory.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.configuration/10.0.11/microsoft.extensions.configuration.10.0.11.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.configuration.abstractions/10.0.11/microsoft.extensions.configuration.abstractions.10.0.11.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.configuration.binder/10.0.11/microsoft.extensions.configuration.binder.10.0.11.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.dependencyinjection/10.0.4/microsoft.extensions.dependencyinjection.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/10.0.11/microsoft.extensions.dependencyinjection.abstractions.10.0.11.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.dependencymodel/10.0.4/microsoft.extensions.dependencymodel.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.diagnostics/10.0.0/microsoft.extensions.diagnostics.10.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.diagnostics.abstractions/10.0.0/microsoft.extensions.diagnostics.abstractions.10.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.http/10.0.0/microsoft.extensions.http.10.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.logging/10.0.4/microsoft.extensions.logging.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.logging.abstractions/10.0.4/microsoft.extensions.logging.abstractions.10.0.4.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.options/10.0.11/microsoft.extensions.options.10.0.11.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.options.configurationextensions/10.0.11/microsoft.extensions.options.configurationextensions.10.0.11.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.extensions.primitives/10.0.11/microsoft.extensions.primitives.10.0.11.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.abstractions/8.22.0/microsoft.identitymodel.abstractions.8.22.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.jsonwebtokens/8.22.0/microsoft.identitymodel.jsonwebtokens.8.22.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.logging/8.22.0/microsoft.identitymodel.logging.8.22.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.identitymodel.tokens/8.22.0/microsoft.identitymodel.tokens.8.22.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/microsoft.visualstudio.solutionpersistence/1.0.52/microsoft.visualstudio.solutionpersistence.1.0.52.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/mono.texttemplating/3.0.0/mono.texttemplating.3.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/newtonsoft.json/13.0.3/newtonsoft.json.13.0.3.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/npgsql/10.0.3/npgsql.10.0.3.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/npgsql.entityframeworkcore.postgresql/10.0.3/npgsql.entityframeworkcore.postgresql.10.0.3.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/system.codedom/6.0.0/system.codedom.6.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/system.composition/9.0.0/system.composition.9.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/system.composition.attributedmodel/9.0.0/system.composition.attributedmodel.9.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/system.composition.convention/9.0.0/system.composition.convention.9.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/system.composition.hosting/9.0.0/system.composition.hosting.9.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/system.composition.runtime/9.0.0/system.composition.runtime.9.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/system.composition.typedparts/9.0.0/system.composition.typedparts.9.0.0.nupkg.sha512", + "/Users/piotrkus/.nuget/packages/system.identitymodel.tokens.jwt/8.22.0/system.identitymodel.tokens.jwt.8.22.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/obj/project.packagespec.json b/BookieApi/src/Bookie.Infrastructure/obj/project.packagespec.json new file mode 100644 index 0000000..0b14d8b --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/project.packagespec.json @@ -0,0 +1 @@ +"restore":{"projectUniqueName":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj","projectName":"Bookie.Infrastructure","projectPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/Bookie.Infrastructure.csproj","packagesPath":"","outputPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Infrastructure/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net10.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net10.0":{"targetAlias":"net10.0","projectReferences":{"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj":{"projectPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Application/Bookie.Application.csproj"},"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj":{"projectPath":"/Users/piotrkus/RiderProjects/Bookie/BookieApi/src/Bookie.Domain/Bookie.Domain.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"all"},"SdkAnalysisLevel":"10.0.200"}"frameworks":{"net10.0":{"targetAlias":"net10.0","dependencies":{"Microsoft.EntityFrameworkCore.Design":{"include":"Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive","suppressParent":"All","target":"Package","version":"[10.0.4, )"},"Microsoft.Extensions.Configuration.Abstractions":{"target":"Package","version":"[10.0.11, )"},"Microsoft.Extensions.Http":{"target":"Package","version":"[10.0.0, )"},"Microsoft.Extensions.Options.ConfigurationExtensions":{"target":"Package","version":"[10.0.11, )"},"Npgsql.EntityFrameworkCore.PostgreSQL":{"target":"Package","version":"[10.0.3, )"},"System.IdentityModel.Tokens.Jwt":{"target":"Package","version":"[8.22.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/local/share/dotnet/sdk/10.0.201/PortableRuntimeIdentifierGraph.json","packagesToPrune":{"Microsoft.CSharp":"(,4.7.32767]","Microsoft.VisualBasic":"(,10.4.32767]","Microsoft.Win32.Primitives":"(,4.3.32767]","Microsoft.Win32.Registry":"(,5.0.32767]","runtime.any.System.Collections":"(,4.3.32767]","runtime.any.System.Diagnostics.Tools":"(,4.3.32767]","runtime.any.System.Diagnostics.Tracing":"(,4.3.32767]","runtime.any.System.Globalization":"(,4.3.32767]","runtime.any.System.Globalization.Calendars":"(,4.3.32767]","runtime.any.System.IO":"(,4.3.32767]","runtime.any.System.Reflection":"(,4.3.32767]","runtime.any.System.Reflection.Extensions":"(,4.3.32767]","runtime.any.System.Reflection.Primitives":"(,4.3.32767]","runtime.any.System.Resources.ResourceManager":"(,4.3.32767]","runtime.any.System.Runtime":"(,4.3.32767]","runtime.any.System.Runtime.Handles":"(,4.3.32767]","runtime.any.System.Runtime.InteropServices":"(,4.3.32767]","runtime.any.System.Text.Encoding":"(,4.3.32767]","runtime.any.System.Text.Encoding.Extensions":"(,4.3.32767]","runtime.any.System.Threading.Tasks":"(,4.3.32767]","runtime.any.System.Threading.Timer":"(,4.3.32767]","runtime.aot.System.Collections":"(,4.3.32767]","runtime.aot.System.Diagnostics.Tools":"(,4.3.32767]","runtime.aot.System.Diagnostics.Tracing":"(,4.3.32767]","runtime.aot.System.Globalization":"(,4.3.32767]","runtime.aot.System.Globalization.Calendars":"(,4.3.32767]","runtime.aot.System.IO":"(,4.3.32767]","runtime.aot.System.Reflection":"(,4.3.32767]","runtime.aot.System.Reflection.Extensions":"(,4.3.32767]","runtime.aot.System.Reflection.Primitives":"(,4.3.32767]","runtime.aot.System.Resources.ResourceManager":"(,4.3.32767]","runtime.aot.System.Runtime":"(,4.3.32767]","runtime.aot.System.Runtime.Handles":"(,4.3.32767]","runtime.aot.System.Runtime.InteropServices":"(,4.3.32767]","runtime.aot.System.Text.Encoding":"(,4.3.32767]","runtime.aot.System.Text.Encoding.Extensions":"(,4.3.32767]","runtime.aot.System.Threading.Tasks":"(,4.3.32767]","runtime.aot.System.Threading.Timer":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.debian.9-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.27-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.fedora.28-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.opensuse.42.3-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple":"(,4.3.32767]","runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography":"(,4.3.32767]","runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http":"(,4.3.32767]","runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security":"(,4.3.32767]","runtime.unix.Microsoft.Win32.Primitives":"(,4.3.32767]","runtime.unix.System.Console":"(,4.3.32767]","runtime.unix.System.Diagnostics.Debug":"(,4.3.32767]","runtime.unix.System.IO.FileSystem":"(,4.3.32767]","runtime.unix.System.Net.Primitives":"(,4.3.32767]","runtime.unix.System.Net.Sockets":"(,4.3.32767]","runtime.unix.System.Private.Uri":"(,4.3.32767]","runtime.unix.System.Runtime.Extensions":"(,4.3.32767]","runtime.win.Microsoft.Win32.Primitives":"(,4.3.32767]","runtime.win.System.Console":"(,4.3.32767]","runtime.win.System.Diagnostics.Debug":"(,4.3.32767]","runtime.win.System.IO.FileSystem":"(,4.3.32767]","runtime.win.System.Net.Primitives":"(,4.3.32767]","runtime.win.System.Net.Sockets":"(,4.3.32767]","runtime.win.System.Runtime.Extensions":"(,4.3.32767]","runtime.win10-arm-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win10-arm64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win10-x64-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win10-x86-aot.runtime.native.System.IO.Compression":"(,4.0.32767]","runtime.win7-x64.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win7-x86.runtime.native.System.IO.Compression":"(,4.3.32767]","runtime.win7.System.Private.Uri":"(,4.3.32767]","runtime.win8-arm.runtime.native.System.IO.Compression":"(,4.3.32767]","System.AppContext":"(,4.3.32767]","System.Buffers":"(,5.0.32767]","System.Collections":"(,4.3.32767]","System.Collections.Concurrent":"(,4.3.32767]","System.Collections.Immutable":"(,10.0.32767]","System.Collections.NonGeneric":"(,4.3.32767]","System.Collections.Specialized":"(,4.3.32767]","System.ComponentModel":"(,4.3.32767]","System.ComponentModel.Annotations":"(,4.3.32767]","System.ComponentModel.EventBasedAsync":"(,4.3.32767]","System.ComponentModel.Primitives":"(,4.3.32767]","System.ComponentModel.TypeConverter":"(,4.3.32767]","System.Console":"(,4.3.32767]","System.Data.Common":"(,4.3.32767]","System.Data.DataSetExtensions":"(,4.4.32767]","System.Diagnostics.Contracts":"(,4.3.32767]","System.Diagnostics.Debug":"(,4.3.32767]","System.Diagnostics.DiagnosticSource":"(,10.0.32767]","System.Diagnostics.FileVersionInfo":"(,4.3.32767]","System.Diagnostics.Process":"(,4.3.32767]","System.Diagnostics.StackTrace":"(,4.3.32767]","System.Diagnostics.TextWriterTraceListener":"(,4.3.32767]","System.Diagnostics.Tools":"(,4.3.32767]","System.Diagnostics.TraceSource":"(,4.3.32767]","System.Diagnostics.Tracing":"(,4.3.32767]","System.Drawing.Primitives":"(,4.3.32767]","System.Dynamic.Runtime":"(,4.3.32767]","System.Formats.Asn1":"(,10.0.32767]","System.Formats.Tar":"(,10.0.32767]","System.Globalization":"(,4.3.32767]","System.Globalization.Calendars":"(,4.3.32767]","System.Globalization.Extensions":"(,4.3.32767]","System.IO":"(,4.3.32767]","System.IO.Compression":"(,4.3.32767]","System.IO.Compression.ZipFile":"(,4.3.32767]","System.IO.FileSystem":"(,4.3.32767]","System.IO.FileSystem.AccessControl":"(,4.4.32767]","System.IO.FileSystem.DriveInfo":"(,4.3.32767]","System.IO.FileSystem.Primitives":"(,4.3.32767]","System.IO.FileSystem.Watcher":"(,4.3.32767]","System.IO.IsolatedStorage":"(,4.3.32767]","System.IO.MemoryMappedFiles":"(,4.3.32767]","System.IO.Pipelines":"(,10.0.32767]","System.IO.Pipes":"(,4.3.32767]","System.IO.Pipes.AccessControl":"(,5.0.32767]","System.IO.UnmanagedMemoryStream":"(,4.3.32767]","System.Linq":"(,4.3.32767]","System.Linq.AsyncEnumerable":"(,10.0.32767]","System.Linq.Expressions":"(,4.3.32767]","System.Linq.Parallel":"(,4.3.32767]","System.Linq.Queryable":"(,4.3.32767]","System.Memory":"(,5.0.32767]","System.Net.Http":"(,4.3.32767]","System.Net.Http.Json":"(,10.0.32767]","System.Net.NameResolution":"(,4.3.32767]","System.Net.NetworkInformation":"(,4.3.32767]","System.Net.Ping":"(,4.3.32767]","System.Net.Primitives":"(,4.3.32767]","System.Net.Requests":"(,4.3.32767]","System.Net.Security":"(,4.3.32767]","System.Net.ServerSentEvents":"(,10.0.32767]","System.Net.Sockets":"(,4.3.32767]","System.Net.WebHeaderCollection":"(,4.3.32767]","System.Net.WebSockets":"(,4.3.32767]","System.Net.WebSockets.Client":"(,4.3.32767]","System.Numerics.Vectors":"(,5.0.32767]","System.ObjectModel":"(,4.3.32767]","System.Private.DataContractSerialization":"(,4.3.32767]","System.Private.Uri":"(,4.3.32767]","System.Reflection":"(,4.3.32767]","System.Reflection.DispatchProxy":"(,6.0.32767]","System.Reflection.Emit":"(,4.7.32767]","System.Reflection.Emit.ILGeneration":"(,4.7.32767]","System.Reflection.Emit.Lightweight":"(,4.7.32767]","System.Reflection.Extensions":"(,4.3.32767]","System.Reflection.Metadata":"(,10.0.32767]","System.Reflection.Primitives":"(,4.3.32767]","System.Reflection.TypeExtensions":"(,4.3.32767]","System.Resources.Reader":"(,4.3.32767]","System.Resources.ResourceManager":"(,4.3.32767]","System.Resources.Writer":"(,4.3.32767]","System.Runtime":"(,4.3.32767]","System.Runtime.CompilerServices.Unsafe":"(,7.0.32767]","System.Runtime.CompilerServices.VisualC":"(,4.3.32767]","System.Runtime.Extensions":"(,4.3.32767]","System.Runtime.Handles":"(,4.3.32767]","System.Runtime.InteropServices":"(,4.3.32767]","System.Runtime.InteropServices.RuntimeInformation":"(,4.3.32767]","System.Runtime.Loader":"(,4.3.32767]","System.Runtime.Numerics":"(,4.3.32767]","System.Runtime.Serialization.Formatters":"(,4.3.32767]","System.Runtime.Serialization.Json":"(,4.3.32767]","System.Runtime.Serialization.Primitives":"(,4.3.32767]","System.Runtime.Serialization.Xml":"(,4.3.32767]","System.Security.AccessControl":"(,6.0.32767]","System.Security.Claims":"(,4.3.32767]","System.Security.Cryptography.Algorithms":"(,4.3.32767]","System.Security.Cryptography.Cng":"(,5.0.32767]","System.Security.Cryptography.Csp":"(,4.3.32767]","System.Security.Cryptography.Encoding":"(,4.3.32767]","System.Security.Cryptography.OpenSsl":"(,5.0.32767]","System.Security.Cryptography.Primitives":"(,4.3.32767]","System.Security.Cryptography.X509Certificates":"(,4.3.32767]","System.Security.Principal":"(,4.3.32767]","System.Security.Principal.Windows":"(,5.0.32767]","System.Security.SecureString":"(,4.3.32767]","System.Text.Encoding":"(,4.3.32767]","System.Text.Encoding.CodePages":"(,10.0.32767]","System.Text.Encoding.Extensions":"(,4.3.32767]","System.Text.Encodings.Web":"(,10.0.32767]","System.Text.Json":"(,10.0.32767]","System.Text.RegularExpressions":"(,4.3.32767]","System.Threading":"(,4.3.32767]","System.Threading.AccessControl":"(,10.0.32767]","System.Threading.Channels":"(,10.0.32767]","System.Threading.Overlapped":"(,4.3.32767]","System.Threading.Tasks":"(,4.3.32767]","System.Threading.Tasks.Dataflow":"(,10.0.32767]","System.Threading.Tasks.Extensions":"(,5.0.32767]","System.Threading.Tasks.Parallel":"(,4.3.32767]","System.Threading.Thread":"(,4.3.32767]","System.Threading.ThreadPool":"(,4.3.32767]","System.Threading.Timer":"(,4.3.32767]","System.ValueTuple":"(,4.5.32767]","System.Xml.ReaderWriter":"(,4.3.32767]","System.Xml.XDocument":"(,4.3.32767]","System.Xml.XmlDocument":"(,4.3.32767]","System.Xml.XmlSerializer":"(,4.3.32767]","System.Xml.XPath":"(,4.3.32767]","System.Xml.XPath.XDocument":"(,5.0.32767]"}}} \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/obj/rider.project.model.nuget.info b/BookieApi/src/Bookie.Infrastructure/obj/rider.project.model.nuget.info new file mode 100644 index 0000000..eceac3d --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/rider.project.model.nuget.info @@ -0,0 +1 @@ +17891904138790535 \ No newline at end of file diff --git a/BookieApi/src/Bookie.Infrastructure/obj/rider.project.restore.info b/BookieApi/src/Bookie.Infrastructure/obj/rider.project.restore.info new file mode 100644 index 0000000..eceac3d --- /dev/null +++ b/BookieApi/src/Bookie.Infrastructure/obj/rider.project.restore.info @@ -0,0 +1 @@ +17891904138790535 \ No newline at end of file diff --git a/BookieClient/.editorconfig b/BookieClient/.editorconfig new file mode 100644 index 0000000..f166060 --- /dev/null +++ b/BookieClient/.editorconfig @@ -0,0 +1,17 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single +ij_typescript_use_double_quotes = false + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/BookieClient/.gitignore b/BookieClient/.gitignore new file mode 100644 index 0000000..854acd5 --- /dev/null +++ b/BookieClient/.gitignore @@ -0,0 +1,44 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/mcp.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings +__screenshots__/ + +# System files +.DS_Store +Thumbs.db diff --git a/BookieClient/.prettierrc b/BookieClient/.prettierrc new file mode 100644 index 0000000..d6c16d7 --- /dev/null +++ b/BookieClient/.prettierrc @@ -0,0 +1,12 @@ +{ + "printWidth": 100, + "singleQuote": true, + "overrides": [ + { + "files": "*.html", + "options": { + "parser": "angular" + } + } + ] +} diff --git a/BookieClient/.vscode/extensions.json b/BookieClient/.vscode/extensions.json new file mode 100644 index 0000000..77b3745 --- /dev/null +++ b/BookieClient/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": ["angular.ng-template"] +} diff --git a/BookieClient/.vscode/launch.json b/BookieClient/.vscode/launch.json new file mode 100644 index 0000000..925af83 --- /dev/null +++ b/BookieClient/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/BookieClient/.vscode/tasks.json b/BookieClient/.vscode/tasks.json new file mode 100644 index 0000000..244306f --- /dev/null +++ b/BookieClient/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "Changes detected" + }, + "endsPattern": { + "regexp": "bundle generation (complete|failed)" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "Changes detected" + }, + "endsPattern": { + "regexp": "bundle generation (complete|failed)" + } + } + } + } + ] +} diff --git a/BookieClient/README.md b/BookieClient/README.md new file mode 100644 index 0000000..257b01d --- /dev/null +++ b/BookieClient/README.md @@ -0,0 +1,59 @@ +# BookieClient + +This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 22.1.5. + +## Development server + +To start a local development server, run: + +```bash +ng serve +``` + +Once the server is running, open your browser and navigate to `http://localhost:4200/`. The application will automatically reload whenever you modify any of the source files. + +## Code scaffolding + +Angular CLI includes powerful code scaffolding tools. To generate a new component, run: + +```bash +ng generate component component-name +``` + +For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run: + +```bash +ng generate --help +``` + +## Building + +To build the project run: + +```bash +ng build +``` + +This will compile your project and store the build artifacts in the `dist/` directory. By default, the production build optimizes your application for performance and speed. + +## Running unit tests + +To execute unit tests with the [Vitest](https://vitest.dev/) test runner, use the following command: + +```bash +ng test +``` + +## Running end-to-end tests + +For end-to-end (e2e) testing, run: + +```bash +ng e2e +``` + +Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs. + +## Additional Resources + +For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. diff --git a/BookieClient/angular.json b/BookieClient/angular.json new file mode 100644 index 0000000..a0188e8 --- /dev/null +++ b/BookieClient/angular.json @@ -0,0 +1,79 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "cli": { + "packageManager": "npm", + "analytics": "b1796264-36dd-48d8-9c10-0ef06a610ff9" + }, + "newProjectRoot": "projects", + "projects": { + "BookieClient": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "browser": "src/main.ts", + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.scss" + ] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "1.5MB", + "maximumError": "2.5MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "4kB", + "maximumError": "8kB" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "BookieClient:build:production" + }, + "development": { + "buildTarget": "BookieClient:build:development" + } + }, + "defaultConfiguration": "development" + }, + "test": { + "builder": "@angular/build:unit-test" + } + } + } + } +} diff --git a/BookieClient/package-lock.json b/BookieClient/package-lock.json new file mode 100644 index 0000000..3624333 --- /dev/null +++ b/BookieClient/package-lock.json @@ -0,0 +1,8363 @@ +{ + "name": "bookie-client", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "bookie-client", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^22.1.3", + "@angular/cdk": "^22.1.3", + "@angular/common": "^22.1.0", + "@angular/compiler": "^22.1.0", + "@angular/core": "^22.1.0", + "@angular/forms": "^22.1.0", + "@angular/material": "^22.1.3", + "@angular/platform-browser": "^22.1.0", + "@angular/router": "^22.1.0", + "chart.js": "^4.5.1", + "jspdf": "^4.2.1", + "jspdf-autotable": "^5.0.8", + "rxjs": "~7.8.0", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@angular/build": "^22.1.5", + "@angular/cli": "^22.1.5", + "@angular/compiler-cli": "^22.1.0", + "jsdom": "^28.0.0", + "prettier": "^3.8.1", + "typescript": "~6.0.2", + "vitest": "^4.0.8" + } + }, + "node_modules/@acemir/cssom": { + "version": "0.9.31", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz", + "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.2201.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2201.5.tgz", + "integrity": "sha512-DAticcJ2tw3M+D1CH4HhlCgMK5tAb0CwSsnczNMJB9QgQsBC/JhOozQTvgnyCvagitX9u+408YcwEW/Wo2pnzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.5", + "rxjs": "7.8.2" + }, + "bin": { + "architect": "bin/cli.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "22.1.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.5.tgz", + "integrity": "sha512-HiY6d5dkIdJs5grP9OHvgkf14QOcDIo+hbuT7YKuLItQ++ZxCwUabJMLCCJ5R0KrstE5NqED0dNcyk5WD01t5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.20.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.5", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "22.1.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.5.tgz", + "integrity": "sha512-HTmo9y8wjXKtJGVTYomTjZsjWzhirpu1pPRAzsVob3eiYOuxv1qDRAgWiHXNGp5CpnbHunZweXY/WffNGOFRyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.5", + "jsonc-parser": "3.3.1", + "magic-string": "1.0.0", + "ora": "9.4.1", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-22.1.3.tgz", + "integrity": "sha512-EgL1BrPcn3yaRamr/R9NlYlV6hZzzKRGxVp/cnfkYzzWKG4Wcno7lkGEo6eA2Vry66AJuXUu4M1BMyhHJ96zzg==", + "deprecated": "@angular/animations is deprecated. Use `animate.enter` and `animate.leave` instead. For more information see: https://v22.angular.dev/guide/animations.", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/core": "22.1.3" + } + }, + "node_modules/@angular/build": { + "version": "22.1.5", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-22.1.5.tgz", + "integrity": "sha512-YqsbHZK3/HFmLLhwxa5SpN+3ABoVo5GFLV0fiEXCQg2KC7gw2pL15x692jxrq8gEGzT7O27bnjWkvFZ0bBHCnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2201.5", + "@babel/core": "8.0.1", + "@babel/helper-annotate-as-pure": "8.0.0", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "6.1.1", + "@vitejs/plugin-basic-ssl": "2.3.0", + "beasties": "0.4.3", + "browserslist": "^4.26.0", + "esbuild": "0.28.2", + "https-proxy-agent": "9.1.0", + "jsonc-parser": "3.3.1", + "listr2": "11.0.0", + "magic-string": "1.0.0", + "mrmime": "2.0.1", + "oxc-parser": "0.142.0", + "parse5-html-rewriting-stream": "8.0.1", + "picomatch": "4.0.5", + "piscina": "5.2.0", + "rolldown": "1.2.0", + "sass": "1.101.0", + "semver": "7.8.5", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.17", + "vite": "8.1.5", + "watchpack": "2.5.2" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.5.6" + }, + "peerDependencies": { + "@angular/compiler": "^22.0.0", + "@angular/compiler-cli": "^22.0.0", + "@angular/core": "^22.0.0", + "@angular/localize": "^22.0.0", + "@angular/platform-browser": "^22.0.0", + "@angular/platform-server": "^22.0.0", + "@angular/service-worker": "^22.0.0", + "@angular/ssr": "^22.1.5", + "istanbul-lib-instrument": "^6.0.0", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^22.0.0", + "postcss": "^8.4.0", + "rollup": "^4.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=6.0 <6.1", + "vitest": "^4.0.8" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "istanbul-lib-instrument": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "rollup": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@angular/cdk": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-22.1.3.tgz", + "integrity": "sha512-6N3S71J877j9zGpCqU0PDIP4AGQf+SjJrA1Pouy+xfC8GE8sfCyIVr0Y6qnpxr5D2k2lROykAMbQekZtKEiEeA==", + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^22.0.0 || ^23.0.0", + "@angular/core": "^22.0.0 || ^23.0.0", + "@angular/platform-browser": "^22.0.0 || ^23.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "22.1.5", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-22.1.5.tgz", + "integrity": "sha512-YZkhI64INQHJkZ13h2n0/0PBrQ5ZZvFGiprrDiCOLAD0y1fehguL0PGp9HxF3ZWf+xWRyP//tIte2gmyAaiWLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2201.5", + "@angular-devkit/core": "22.1.5", + "@angular-devkit/schematics": "22.1.5", + "@inquirer/prompts": "8.5.2", + "@listr2/prompt-adapter-inquirer": "4.2.5", + "@modelcontextprotocol/sdk": "1.30.0", + "@schematics/angular": "22.1.5", + "jsonc-parser": "3.3.1", + "listr2": "11.0.0", + "npm-package-arg": "14.0.0", + "parse5-html-rewriting-stream": "8.0.1", + "semver": "7.8.5", + "yargs": "18.1.0", + "zod": "4.4.3" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-22.1.3.tgz", + "integrity": "sha512-QtMkjhiRd0EnmKR50bw3WbCWYTi6CmA72nnSz1BLQPpaLSi2goloCrPPniHz8fP+w2ESrmmlOWxs1Da3COgnQg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/core": "22.1.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-22.1.3.tgz", + "integrity": "sha512-L8Mw2r7bGG/obqgQC+RU3mdFJ3NtLgO5gWhEC1ylcHpLCMPIAXYsMKJIL8dnS78S1wXo/omXwmJ4FiIlCwWahg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-22.1.3.tgz", + "integrity": "sha512-37lLaDp0RHWZ/lmJqCmIEr0HOM2D5ulHy61gqTBm7KRj3Y6ZaxR8B/JqZmeIpPzKFILVsga+NQ4A8apBUkmezw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "8.0.1", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^5.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^18.0.0" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/compiler": "22.1.3", + "typescript": ">=6.0 <6.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/core": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-22.1.3.tgz", + "integrity": "sha512-313+Xkf970AmStJE0E/zNJW/9xvDExQG+6TNltBBl+KJsW0q5dffK2w2PQfV4mtTquBqYoeHSRsms4WgjBKL8g==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/compiler": "22.1.3", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } + } + }, + "node_modules/@angular/forms": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-22.1.3.tgz", + "integrity": "sha512-b4ual9pgfNqcnEHord50w960DDFIytG3Qb3bu2aCgzmagvRlg9wrtwQNqY+oqY2FVq7c9McNUN7MZRcWl9HNdQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "tslib": "^2.3.0", + "zod": "^4.0.10" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/common": "22.1.3", + "@angular/core": "22.1.3", + "@angular/platform-browser": "22.1.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/material": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-22.1.3.tgz", + "integrity": "sha512-JNIhfEzJBc3WgOb2lPX4EBc/SE67Q7W0WL6U0nf7ahGwS4sce9yapbZoe3AE7zRCl8oiRbe346SwL0bFyxGHmA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": "22.1.3", + "@angular/common": "^22.0.0 || ^23.0.0", + "@angular/core": "^22.0.0 || ^23.0.0", + "@angular/forms": "^22.0.0 || ^23.0.0", + "@angular/platform-browser": "^22.0.0 || ^23.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-22.1.3.tgz", + "integrity": "sha512-A8McE6AclwZa2ese4jMfZZu+qZfBFQ4Hl6CaMpzJ1C6Vv6+sXkLu9pouTosJEsUE+etVdepDsqau90lhzgw3Eg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/animations": "22.1.3", + "@angular/common": "22.1.3", + "@angular/core": "22.1.3" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/router": { + "version": "22.1.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-22.1.3.tgz", + "integrity": "sha512-23owvZKCpdL7Yh3EzBj4OLf3x0z+jT9b57Qk96wdwI8Lsyf9L78/RJPYCutJ5r+zq3pFM/BHVKyd+2hkfH7N6Q==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/common": "22.1.3", + "@angular/core": "22.1.3", + "@angular/platform-browser": "22.1.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.6" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", + "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^8.0.0", + "js-tokens": "^10.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-8.0.0.tgz", + "integrity": "sha512-DOjnob/cXOUgDOozCDeq/aK2p5y8dUIVdf6tNhEV1HQRd6I8aQ4f4fbtHRVEvb6lP3BGomrKHiS8ICAASSVQSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/core": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-8.0.1.tgz", + "integrity": "sha512-5FgxM4dLQpMJHSiVATk8foW263dVHQHBVpXYiimNECVWG01f4nFyEbQixeT6Mwvg7TayREJ2gpKl3o2RoMdnqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.0", + "@babel/helper-compilation-targets": "^8.0.0", + "@babel/helpers": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/template": "^8.0.0", + "@babel/traverse": "^8.0.0", + "@babel/types": "^8.0.0", + "@types/gensync": "^1.0.5", + "convert-source-map": "^2.0.0", + "empathic": "^2.0.1", + "gensync": "^1.0.0-beta.2", + "import-meta-resolve": "^4.2.0", + "json5": "^2.2.3", + "obug": "^2.1.1", + "semver": "^7.7.3" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0.tgz", + "integrity": "sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "@types/jsesc": "^2.5.0", + "jsesc": "^3.0.2" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-8.0.0.tgz", + "integrity": "sha512-NSpMkMsvvZqzThJ0p1B02cbtA2ObEyfBvq950bmNkyxsxvcxwhvvCB036rKhlEnuBBo30bOrk13u3FzlKSoRrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.0.tgz", + "integrity": "sha512-JwculLABZvyPvyLBpwU/E/IbH2uM3mnxNtIJpxnIfb24y1PrdVxK5Dqjle4DpgqpGRnwgC7G8IkzPdSXZrO1Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^8.0.0", + "@babel/helper-validator-option": "^8.0.0", + "browserslist": "^4.24.0", + "lru-cache": "^11.0.0", + "semver": "^7.7.3" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-8.0.0.tgz", + "integrity": "sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0.tgz", + "integrity": "sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", + "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-8.0.0.tgz", + "integrity": "sha512-U4Dybxh4WESWHt5XhBeExi4DrY0/DNK1aHpQbsrQXCUbFHuMweT0TpLEWKvaraV2Y6fS+ZXunsZ8zIuZIgvF2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helpers": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-8.0.0.tgz", + "integrity": "sha512-wfbi91pM3py96oIiJEz7qIpyXDytgr9zQC1HEWwlGNVRAEmItuU/0a41ZUKu1sJGyhhOIpc4t5vk4PYzt8wpsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/parser": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.4.tgz", + "integrity": "sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-8.0.0.tgz", + "integrity": "sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/traverse": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.4.tgz", + "integrity": "sha512-bZnmqzGG8UZneG1lLxBoWIH0G6Gr1D846Yu4/3XnY6FhCndMR49u26nTY08u/dAxWmLWF9vGQOuC+84FfIUoeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.0", + "@babel/helper-globals": "^8.0.0", + "@babel/parser": "^8.0.4", + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.4", + "obug": "^2.1.1" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/types": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.4.tgz", + "integrity": "sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^8.0.0", + "@babel/helper-validator-identifier": "^8.0.4" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.1.tgz", + "integrity": "sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.3.0.tgz", + "integrity": "sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.2.0.tgz", + "integrity": "sha512-5+5LEmFuY1AjXdYhmgjTJogtQnP1evJ1zrBZGUNZ0thkpwnnmKxcHdAMn/OtFjAb25zA+jKDVYVRl+5G7rjv1A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.1.1", + "@csstools/css-calc": "^3.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.8.tgz", + "integrity": "sha512-CpMLjAvwQg3BL5S0IeqsZNMH7EQrEWi0kLKOC13ZBF0ZwERiLWlibNPJr8G1kdU3Ms/r2KiNrF81pUh2HwAHdg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.2.tgz", + "integrity": "sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", + "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@harperfast/extended-iterable": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@harperfast/extended-iterable/-/extended-iterable-1.0.3.tgz", + "integrity": "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@hono/node-server": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.1.tgz", + "integrity": "sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@inquirer/ansi": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.7.tgz", + "integrity": "sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.2.tgz", + "integrity": "sha512-Y5/bAScMy5Y+9isCx0SKbyJebMCaXXX5em0kxkj115eZNscgV9srOHrgyfS0e5xAVymIfOh9piYBKDILktsMMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^12.0.0", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/checkbox/node_modules/@inquirer/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.1.1.tgz", + "integrity": "sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.2.1.tgz", + "integrity": "sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.3.0.tgz", + "integrity": "sha512-nnsP/IdJ8s83q7ZuObmgn12QM+uLCkab9E0Oordojbn62WUg1c+v9Ou/F/057pgh0ppX0W+Hj5bO/Dp5hsxQtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.0", + "@inquirer/external-editor": "^3.0.4", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor/node_modules/@inquirer/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.2.tgz", + "integrity": "sha512-OWIH1IyyWqEKIyqC9Xy+Bnga7NkGMovFdo4atYZMUOTRqf6rO2WCv9E/1MyzvOErDBCxs+9UFliRUDc50xs/jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.0", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand/node_modules/@inquirer/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.4.tgz", + "integrity": "sha512-tZbbaK2ovq6vlrRBNQvjrypmrED/p5x2ncIHQ79cD55tei3dD96v5glMMA+6tiq7K104i/25DVYKWVPJuV6ptA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.2" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.8.tgz", + "integrity": "sha512-tApbon79GM9ry56ja/Ud3SY2CL4TQsao9fIwDQbgTeNY55025GdMzQ2+UdegV/lx51VNGUB59M0v0nMpybYY4Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/input": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.3.tgz", + "integrity": "sha512-F/BZHtyEzP+HO+IGVd4AjBRgvX/ywm42bx8S0+dENk2YclzE9tJ3X/15THwtT6ehApmKvdYDMsVTuyyDod0gOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.0", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/input/node_modules/@inquirer/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.2.0.tgz", + "integrity": "sha512-ew+fSDijsQ/WhD4TV3XLb+if400cDuzTzHfGR8sTNBXkK9CYDWoGE8fhaO8GbT312pNv1AJEOsDxy/z/HVettA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.0", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number/node_modules/@inquirer/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.1.2.tgz", + "integrity": "sha512-nSdufycW8xynEVssFkNQEYIzTySilog0UlfOVRwh3pXzPSk4frXUT2jZWjHnKae6RU9PaoF9wfy1pGwewQuqGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^12.0.0", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password/node_modules/@inquirer/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.5.2.tgz", + "integrity": "sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^5.2.1", + "@inquirer/confirm": "^6.1.1", + "@inquirer/editor": "^5.2.2", + "@inquirer/expand": "^5.1.1", + "@inquirer/input": "^5.1.2", + "@inquirer/number": "^4.1.1", + "@inquirer/password": "^5.1.1", + "@inquirer/rawlist": "^5.3.1", + "@inquirer/search": "^4.2.1", + "@inquirer/select": "^5.2.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.2.tgz", + "integrity": "sha512-oPSKrYK1X1bMkjXDzIKHUkJp195LFSfgbnVtXnjSKGFjrCbS6I+wyvfAZTwKE9BSt3HwWgfD7JfsXALBgCogzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.0", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist/node_modules/@inquirer/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.3.0.tgz", + "integrity": "sha512-HFxXE5w727ctSUcAwrDquftJGjMgu36OeV5SHEXMlr2j/ahzmRX9xSEeVolV8tzYnTf45cg6vGkdMMRdm3RPhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.0", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search/node_modules/@inquirer/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.2.tgz", + "integrity": "sha512-RkI8dRHWt+bh04oLixvF1kFzKC7e5rqJoHKkzcqSHATebBXFC6GmrT8ddbVkgSzLV0HnHs2cPFuBINr8otij8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^12.0.0", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select/node_modules/@inquirer/core": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.0.tgz", + "integrity": "sha512-+nnvFEXIB08CZNVXpvW3B+zHW96QXvGUjNKJ8NJIPqAZi5Kd4WhYt2S3C234ReepG1qw2HOlEUbjYVHBowXObA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.8", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.7.tgz", + "integrity": "sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-4.2.5.tgz", + "integrity": "sha512-pYGy9dTdTwXdasPgyohkr0HoQ4FrkAzFnsUZl/gcnadDArbpZ8e+fgr+F9WBdNEl2y00mb9bCM4WgmoBkZJ27A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=22.13.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 9", + "listr2": "11.0.0" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.5.6.tgz", + "integrity": "sha512-mY5FG4TjPAkY4P0w+OhHaUka5mDh2TX2WKYIwuKzJ1zeW3VvRgxdam/lGJTquI+bthTx5CSHDW+BAQCnNAzkEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.5.6.tgz", + "integrity": "sha512-foa+pwitysO8k+xhs7psBFfTKnVgR69NlZRRTHaFVDqphh7AdGpLeyRzKw/ofatr/sN6TiHRRW6mmop0ZrrppQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.5.6.tgz", + "integrity": "sha512-QR4YRyR5h5Z8eGXrNQjiyo2NNDfqi3tCc9dQG5Is1blCt+qWw1ZoBWhlWAr5d+jshkifMIJjVHzHGKbkKzF8Tw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.5.6.tgz", + "integrity": "sha512-HmiyFFdJa38s1heCMSooSPaBSFTHJ3C+ERPp28xAPlDX1YiALJVOgbry065nXd8Y7KISWjnw05zpG1RX8IfftA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.5.6.tgz", + "integrity": "sha512-ADzCuCF2cTNiX9kDScqcz1fjnAkxPpQNneV3KFTdV3wWtVlI2sTGzySoMTgDpinkMMFj1NTJlxA6XR8fwc4hlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.5.6.tgz", + "integrity": "sha512-J7A9aEQsQiv0TYtBGL7NDIPp2lOS8nnl+zm4sWZm1xlsTTaQ4PgD096Adzdrk27rw3UxCkDXdCUa4ax41oztBQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.5.6.tgz", + "integrity": "sha512-1g7G0knRX2iV/voDu54yxrGqw5Dk0w2oIYb7dgJq8IkOi+m7wbD8Q3QpPFjh0C01G58S88dqGn03len6UPCXsg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", + "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9 || ^2.0.5", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz", + "integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz", + "integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz", + "integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz", + "integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz", + "integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz", + "integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.3.tgz", + "integrity": "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + } + }, + "node_modules/@oxc-parser/binding-android-arm-eabi": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.142.0.tgz", + "integrity": "sha512-ZiRGDutGsv1G6bL/ozy/koC0Sv39T1DqyoC4KD1DOy9ZoACm1O5UWhEK2c02Qdk+4lfLVkvFa/mQ0fm/4h1BtQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.142.0.tgz", + "integrity": "sha512-WZkvGRLNQTz8lR9zP5nLjUdlroRCopBu3g9zF1p/laE6DzT1UbQo8Rdz5MWhaJUPYg/6gp+jo7HUgsyKaN1FtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.142.0.tgz", + "integrity": "sha512-l4khS8LQOOVYsGRVARo1gSaCT/aBSceUVXgtovWc2+drnxVuDr082WA3OCHVdVzIz5JIrP/y9CWsSKxBDNmYGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.142.0.tgz", + "integrity": "sha512-QBsNF3nqlXmcH2B1YOPqQYmCJoy4HuIjUxGbBO/k5JAJUl68ghU2psRY2zPk+RyBaWqKP/qfL4oaFgEMCdwskA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.142.0.tgz", + "integrity": "sha512-b7Q7m4Cqc6XqNhri3R+QhU+GVy646Pn+bkdhrDdWym/Fdi0ZUa+d73H9dm5H91JtbtAQ/z1d8XKMW3oOV8a4tQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.142.0.tgz", + "integrity": "sha512-3riVS5IhdH3uCZj1Y9ftDQlR0dvLsIlw/edrRqk8JhgNd5K0XSs+UBtgh50N13CAlW9/TXj6sVGXaKNBocd0Yg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.142.0.tgz", + "integrity": "sha512-NmXUOpgpTSkhl795TiXmWppTwmSJ92RC1qvD6e4XOF+slgmo3e6Ah+kEu+6AN8s7NAOEwqGmir58MgSQSWmBSA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.142.0.tgz", + "integrity": "sha512-gc0EXsKtXgerujmU2Bql3u1L1HsSQ2774R83idq/FoNMPVV/RY/1ErFsvnit7KoiP/sLvzQixeUo4Ut0ic0wmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.142.0.tgz", + "integrity": "sha512-F2XvmWSE0uWpie+jHKKIFgdVOe9ypGhkEZxKx5DuW215K6cbAC274yYaPkcM7EqY4Df3Weyhpcz3lsURyH2LVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-ppc64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.142.0.tgz", + "integrity": "sha512-wLMbT21U/QxknQsk+VvNF0b9D2/aGWhcaQQQ+VYlE8FwD5+GoWZIPPXNzyHmkYyhm0KB3itL+TBavjMatqNnYA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.142.0.tgz", + "integrity": "sha512-+G8F/4ckwT7FCJV4H2bt09xEzJbjNCfuL4Sp1AYNaFtFMVtgIGMuJlteT82U+K0UIZ/DzAR/LDlMFnEuajG7Kw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-musl": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.142.0.tgz", + "integrity": "sha512-hTsHtTLxMAfCo+rpF5K3qZJKW2NpPN/CHd4mYB3y7XlSdspHkd2gehDIofP64AacA9nWQw2tY3O7wR6UY8IVOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.142.0.tgz", + "integrity": "sha512-6y7qYY3TCUDYjqswImdTGl92y+KA/80twALegQPN27kfY+bG7Ib1+L3jbmrCZQx6wrVnai9IPsEZp07I0hx7JQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.142.0.tgz", + "integrity": "sha512-i69kAWU+2LgoH5bR+zWiiu+UzAw7Oxkwv7COeJTeY19pn4e70nKQcr9Pm6cL2Z0Z54d+gl9qADlK/0yyuCPiBA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.142.0.tgz", + "integrity": "sha512-4SQs678MmjYVrmhAgCWD4o0vpaFszXw9xLX5p2Z9MMFcltxiLkA88wQjh80YHjPrXtpyZ2CWI5m+1yNKM0m2Pw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-openharmony-arm64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.142.0.tgz", + "integrity": "sha512-YHpx9N7Ln3a++Tc8rv+H7mrK1zyJQOAwCFg8LZ3lTs1T5afGWeZrLPhPT9HLnIwSjCyJqPWVMIrMxbjcmBr2oQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.142.0.tgz", + "integrity": "sha512-3pLDyY3+oogW73RM5uehNgAiR/Xfb7fvO2Q1Z1gIqZ2+50XDVQmBVlRkHXZTU4gKnQHpwETNsYQVsJ3joVB2iA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.2", + "@emnapi/runtime": "1.11.2", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.142.0.tgz", + "integrity": "sha512-Had/VeVY28Oyb0K+Q4FV8KCzoBycIh93oDK6pCbya9lkzdq+ikMHMgBubsdqqlybjJmQRawCQRrnBRHyQwYvcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-ia32-msvc": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.142.0.tgz", + "integrity": "sha512-GGi3+YphVHavvgs6gum2UXoNCqzHAmPt/nXkn8ZQZstV2Q1qZD1Mn8fz/nWrDkefHQtrG/+1/XrbMxsBTo6Svw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.142.0.tgz", + "integrity": "sha512-Ny/Wv4Us1LGC/ljwNTp+Hx3r/pH15EFfeDF0p+n898gt+TtRd6C9SccHcuUhDiNTb8s5tt7jdeAMDRQZ4Vq6hg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.142.0.tgz", + "integrity": "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.0.tgz", + "integrity": "sha512-9yB1l95IrJuNGDFdOYe79vdApdz6WWBCObE+rQ2LUliYUlcyFwSYIb2xb5/Ifw7dAtMy2ZqNyd8QTSOc7duAKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-pexNaW9ACLUOaBITOpU6qVu4VrsOFIjTv6bzgu0YUATo4eUJx0V605PxwZfndpPOn0ilqGqvGQ0M8UW0IE24jg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.0.tgz", + "integrity": "sha512-NqKYaq0355ZmNMG4QGpxtEDxsc7tGDhjhCm4PpE0cwnBW+5Il95LJyq414niEiaKLVjnVHBEjSo1wngKxJNiFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.0.tgz", + "integrity": "sha512-3vPoHzh6eBTz9IbB0/qZdSr0Qeks2echn+I4cHu2joV74VriPDdldswksEDzrl1mBB+oPRi+67+3Ib59paxIPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.0.tgz", + "integrity": "sha512-E6NNefZ1bUVmKJq2tJkf45J4Zyczj7qm9rUT7NY+Xo2474Y13qWAwc2tvBt0BAVbmtXR1llkxXg0Ou1jbDf2SQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.0.tgz", + "integrity": "sha512-D+TgkdgM1vu+7/Fpf8+v0ARW+RXEP9Ccazgm8zQ4JFFd9Q7SrYQ2TakU5S5ihazQDgpKyAgZDOcIFsvoHmTZ8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.0.tgz", + "integrity": "sha512-wUqdwJBbAv0APN87GecstdMUtLjjNTs0hBALpxETD73mccFxdmt/XeizXDtN5RAlBwNKmI+Tg+blect2G+8IeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.0.tgz", + "integrity": "sha512-9DtF35qR9/NrfhM4oxLplCzVVjE+KKm8Pjemi0i/sdhAWkUasjmSo8WTTubNJClhSHCfyk2yeyoXDQEDPtDAAw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.0.tgz", + "integrity": "sha512-RzuHrBh8X8Hntd2N4VR02QGEciq/9JhcZoTpR/Cee6otRrlILGCf3cg2ygHuih+ZebUnWmMrDX6ITI85btO6rQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.0.tgz", + "integrity": "sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.0.tgz", + "integrity": "sha512-gyrxLQ9NfGb/9LoVnC4kb9miUghw1mghnkfYvNHSnVIXriabnfgGPUP4RLcJm87q3KgYz4FYUG8IDiWUT+CpSw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.0.tgz", + "integrity": "sha512-/6VFMQGRmrhP77KXDC+StIxGzcNp5JOIyYtw0CQ8gPlzhpiIRucYfoM5FaFamHd5BJYIdH86yfP46l1p3WdrFA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.2.0.tgz", + "integrity": "sha512-rwdbUL465kisF24WEJLvP3JrEG6E5GRuIHt5wpMwHGERtHe4Wm2CIvtf5gTBgr2tGOHKh5NdKEAFS2VkOPE91g==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.2", + "@emnapi/runtime": "1.11.2", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.0.tgz", + "integrity": "sha512-+5suHwRiKGmhwyUaNT8a5QbrBvLFh2DbO910TEmGRH1aSxwrCezodvGQnulv4uiWEIv1Kq4ypRsJ5+O+ry1DiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.0.tgz", + "integrity": "sha512-WfFv6/qGufotqBSBzBYwgpCkJBk8Nj7697LL9vTz/XWc67e0r3oewu8iMRwQj3AUL45GVD7wVsPjCsAAtW66Wg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@schematics/angular": { + "version": "22.1.5", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-22.1.5.tgz", + "integrity": "sha512-3UXlO4YoGgQ6nEBbCTGRRHTfQuDcKgHbRaiivzSinHzOYigsskwvloMsa0LCBCO/3uJpDIjJIyTW0XKhDti0iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.5", + "@angular-devkit/schematics": "22.1.5", + "jsonc-parser": "3.3.1", + "typescript": "6.0.3" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/gensync": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.5.tgz", + "integrity": "sha512-MbsRCT7mTikHwKZ0X+LVUTLRrZZRLipTuXEO9qOYO+zmjMVk81axyClMROf6uoPD9MRVu46bx8zoR0Ad9q3NAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@types/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==", + "license": "MIT" + }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.3.0.tgz", + "integrity": "sha512-bdyo8rB3NnQbikdMpHaML9Z1OZPBu6fFOBo+OtxsBlvMJtysWskmBcnbIDhUqgC8tcxNv/a+BcV5U+2nQMm1OQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz", + "integrity": "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz", + "integrity": "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.11", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz", + "integrity": "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz", + "integrity": "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.11", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz", + "integrity": "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.11", + "@vitest/utils": "4.1.11", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz", + "integrity": "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz", + "integrity": "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.11", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", + "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.19.tgz", + "integrity": "sha512-Grytf1xOxOEMTGRwx6rLGKkTabd4vMg3VrKdj/7joCmV0qgh4QwMMO6xh34YEXQqirAuUdgQGa5orJQQ+69RBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/beasties": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.4.3.tgz", + "integrity": "sha512-fIIeLOcbAB/K1kb1HBVJoiq1alHL4RCYBSo5e7HzrNkkgMggXR1Vqt/Z9JWnkfe/qdCo66Ux3QRwZioAIBdWRA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3", + "postcss-safe-parser": "^7.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvg": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", + "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chart.js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", + "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-6.1.1.tgz", + "integrity": "sha512-06p9vyLahLa4zkGcgsGxU6iEkSOiuI4fhCH6Emhe2lPAcoUv73n72DnODsnHA+5wwXGnV0n9M9/qOQJSjYhFhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^9.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-js": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.50.0.tgz", + "integrity": "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "license": "MIT", + "optional": true, + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssstyle": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", + "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.0.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.28", + "css-tree": "^3.1.0", + "lru-cache": "^11.2.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.14.tgz", + "integrity": "sha512-dVoH9z+MY+C9IilgGCk3YfFqjLi3fChm2OiKJMzh6axrJ5qwxqWaZamgmHrpv22CN/KdbZJuGEGgfQoL00LTdg==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optional": true, + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.414", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.414.tgz", + "integrity": "sha512-aYlviXiaXBbzvKgyALpcMmqa3Np3sDr0XnZbEG62n2UpZFbEcjQ4EEMOLGzVPhwVnwTz0lvKY+GcARbunuHekw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/empathic": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", + "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.2.tgz", + "integrity": "sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-png": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/fast-png/-/fast-png-6.4.0.tgz", + "integrity": "sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==", + "license": "MIT", + "dependencies": { + "@types/pako": "^2.0.3", + "iobuffer": "^5.3.2", + "pako": "^2.1.0" + } + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-uri": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz", + "integrity": "sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", + "license": "MIT" + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.13.4", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.4.tgz", + "integrity": "sha512-AGEwKIyRMHRv1t8Wjwa3LHxQ61X5CqrdFT+4BRNTpqS5aJNnpl5WLjADb7vFlJzI/8uK7T5QLVApCMQKNa3LgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hosted-git-info": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-10.1.1.tgz", + "integrity": "sha512-DeOnSPAvOndYKfw075gt8yZzQ7S2hNztw34zBTfhIzLhmBTswIBg5/y+pqu/VD5cYWm5goAFTusDmUEmKZ0PEQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "license": "MIT", + "optional": true, + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.1.0.tgz", + "integrity": "sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/iobuffer": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/iobuffer/-/iobuffer-5.4.0.tgz", + "integrity": "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==", + "license": "MIT" + }, + "node_modules/ip-address": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz", + "integrity": "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jose": { + "version": "6.2.10", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.10.tgz", + "integrity": "sha512-iiW7J9qRFlGxvCOIBDBDxFePQSn7ZMAnrYGhrrOo6siO/MIqwfyilLR27pkfDgUk+raLuzADS8A3S/KLBisc0g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", + "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@acemir/cssom": "^0.9.31", + "@asamuzakjp/dom-selector": "^6.8.1", + "@bramus/specificity": "^2.4.2", + "@exodus/bytes": "^1.11.0", + "cssstyle": "^6.0.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "undici": "^7.21.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jspdf": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-4.2.1.tgz", + "integrity": "sha512-YyAXyvnmjTbR4bHQRLzex3CuINCDlQnBqoSYyjJwTP2x9jDLuKDzy7aKUl0hgx3uhcl7xzg32agn5vlie6HIlQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.6", + "fast-png": "^6.2.0", + "fflate": "^0.8.1" + }, + "optionalDependencies": { + "canvg": "^3.0.11", + "core-js": "^3.6.0", + "dompurify": "^3.3.1", + "html2canvas": "^1.0.0-rc.5" + } + }, + "node_modules/jspdf-autotable": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-5.0.8.tgz", + "integrity": "sha512-Hy05N86yBO7CXBrnSLOge7i1ZYpKH2DjQ94iybaP7vBhSInjvRBgDc99ngKzSbSO8Jc98ZCally8I6n0tj2RJQ==", + "license": "MIT", + "peerDependencies": { + "jspdf": "^2 || ^3 || ^4" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/listr2": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-11.0.0.tgz", + "integrity": "sha512-8K88S0aSrcSXdJfiZtEy5BQMnR+TyjrCGLcgAvQs6ta0NEnIm0RJ72/Pv67Jvg07cfBhDbuN74V81lSSVYEFEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^6.1.1", + "log-update": "^8.0.0", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22.13.0" + } + }, + "node_modules/lmdb": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.5.6.tgz", + "integrity": "sha512-j3uE8ReKNyUWDjhfEFSJqE/1DLtfTR5Z8yFzVHvBjAk37wNg7HdScjcv8ttPHRvrdgPQMPWxFFI0SsdBzI5lBw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@harperfast/extended-iterable": "^1.0.3", + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.5.6", + "@lmdb/lmdb-darwin-x64": "3.5.6", + "@lmdb/lmdb-linux-arm": "3.5.6", + "@lmdb/lmdb-linux-arm64": "3.5.6", + "@lmdb/lmdb-linux-x64": "3.5.6", + "@lmdb/lmdb-win32-arm64": "3.5.6", + "@lmdb/lmdb-win32-x64": "3.5.6" + } + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-8.0.0.tgz", + "integrity": "sha512-lddSgOt3bPASrylL54ZSpy8nBHns+vBVSoILlVOx+dei300pnLRN958rj/EdlVLKuWlSESU3qdnDZdAI7FXYGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.3.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^9.0.0", + "string-width": "^8.2.0", + "strip-ansi": "^7.2.0", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.0.0.tgz", + "integrity": "sha512-CGvjzMN08iv6w1mm4/x3Gh1hLb4VnyRUA15FFpl6CsCIGGoe36k7kY5KNz9QDbSBN5I/fWHM6ZlIkUTa5xdUEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.12.1.tgz", + "integrity": "sha512-4EUH9tQHnMmEgzW/MdAP0KIfa1T9AF+htl0ffe2n5vb2EKn9y2co8ccpgWko6S52Jy1PQZKwRnx5/KkYjtd9MQ==", + "dev": true, + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz", + "integrity": "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" + } + }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm-package-arg": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-14.0.0.tgz", + "integrity": "sha512-69XQh3k+dtGa1p+7RaR57IuG3rCko96xr/nUfN4yDYBXbTYICiWcOpsFKLN2GtGE9cyIljE+f1exnaYt9MvM+Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^10.1.0", + "proc-log": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^8.0.0" + }, + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.4.1.tgz", + "integrity": "sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.2", + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", + "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/oxc-parser": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.142.0.tgz", + "integrity": "sha512-kKR+jPiRJYJDexVoziIg/FVGvr1fT1FZSSJOk6tVoMKKSlsf1Cso+cgGCJkOEDWOP174vRntCPFKg+AS7InWvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.142.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-android-arm-eabi": "0.142.0", + "@oxc-parser/binding-android-arm64": "0.142.0", + "@oxc-parser/binding-darwin-arm64": "0.142.0", + "@oxc-parser/binding-darwin-x64": "0.142.0", + "@oxc-parser/binding-freebsd-x64": "0.142.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.142.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.142.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.142.0", + "@oxc-parser/binding-linux-arm64-musl": "0.142.0", + "@oxc-parser/binding-linux-ppc64-gnu": "0.142.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.142.0", + "@oxc-parser/binding-linux-riscv64-musl": "0.142.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.142.0", + "@oxc-parser/binding-linux-x64-gnu": "0.142.0", + "@oxc-parser/binding-linux-x64-musl": "0.142.0", + "@oxc-parser/binding-openharmony-arm64": "0.142.0", + "@oxc-parser/binding-wasm32-wasi": "0.142.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.142.0", + "@oxc-parser/binding-win32-ia32-msvc": "0.142.0", + "@oxc-parser/binding-win32-x64-msvc": "0.142.0" + } + }, + "node_modules/pako": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.2.0.tgz", + "integrity": "sha512-zJq6RP/5q+TO2OpFV3FHzlPnFjmkb7Nc99a5SNjJE+uu/PkpChs+NIZSSzbBoD+6kjiISXjfYdwj1ZRQ81dz/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "(MIT AND Zlib)" + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.1.tgz", + "integrity": "sha512-NaRku2aMpUN1Sh1Gyk1KWUh2A7EJx2c6qYzvwsPtqhoHoaURshdrceYK3LunVCm3WHhm6FS7Vcczbvdh3/UIVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT", + "optional": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/piscina": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.2.0.tgz", + "integrity": "sha512-DszUCKeVN/5G5QKo6jAVHL8fmKnkJvQ0ACiVgY7YGCq3TUB2oznAOayvZPIAdEThvhczkXR+qm3IHsNXpFCYfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/prettier": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-7.0.0.tgz", + "integrity": "sha512-FYgfaA69XZ93zaXLoMNQ+ViDXGGBgR8aLh03txzcFhV+9xOXx7+8DLCULrKKpR9+GsH9ZfHm82aSUPpozX0Ztg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-agent-negotiate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", + "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "kerberos": "^2.0.0" + }, + "peerDependenciesMeta": { + "kerberos": { + "optional": true + } + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "optional": true + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, + "node_modules/rolldown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.0.tgz", + "integrity": "sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.140.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.2.0", + "@rolldown/binding-darwin-arm64": "1.2.0", + "@rolldown/binding-darwin-x64": "1.2.0", + "@rolldown/binding-freebsd-x64": "1.2.0", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.0", + "@rolldown/binding-linux-arm64-gnu": "1.2.0", + "@rolldown/binding-linux-arm64-musl": "1.2.0", + "@rolldown/binding-linux-ppc64-gnu": "1.2.0", + "@rolldown/binding-linux-s390x-gnu": "1.2.0", + "@rolldown/binding-linux-x64-gnu": "1.2.0", + "@rolldown/binding-linux-x64-musl": "1.2.0", + "@rolldown/binding-openharmony-arm64": "1.2.0", + "@rolldown/binding-wasm32-wasi": "1.2.0", + "@rolldown/binding-win32-arm64-msvc": "1.2.0", + "@rolldown/binding-win32-x64-msvc": "1.2.0" + } + }, + "node_modules/rolldown/node_modules/@oxc-project/types": { + "version": "0.140.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.140.0.tgz", + "integrity": "sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.101.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.101.0.tgz", + "integrity": "sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slice-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-9.0.0.tgz", + "integrity": "sha512-SO/3iYL5S3W57LLEniscOGPZgOqZUPCx6d3dB+52B80yJ0XstzsC/eV8gnA4tM3MHDrKz+OCFSLNjswdSC+/bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", + "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "dev": true, + "license": "MIT" + }, + "node_modules/stdin-discarder": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", + "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "license": "MIT", + "optional": true, + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", + "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", + "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.4.11", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.11.tgz", + "integrity": "sha512-aBiNayCfTQxuIJBm06M+xR14cYaYlDlSXZbgsnKzKNxDKUVq7KFwTjwBSsb7m9Y5xO8WfPnBc63WaYFMTGlvqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.11" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.11", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.11.tgz", + "integrity": "sha512-CW3WN2rIIE/Of21mulhgnGOwoDyEFNygyIBOONSdyAuSATgMMUCpLeUlB+E8sAwA5xRV9hYPl+kyZ9citHCaKg==", + "dev": true, + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/validate-npm-package-name": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-8.0.0.tgz", + "integrity": "sha512-SCv6OOV6Xj2/3cXy3dGmADluJTNcL3o7hZAglNPTe+WYuEuvxgJzxPrSDLZhF+CwyQOubqgecjMmTJGMVLWjYQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.5.tgz", + "integrity": "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.17", + "rolldown": "~1.1.5", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/vite/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/vite/node_modules/@oxc-project/types": { + "version": "0.139.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/rolldown": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz", + "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.139.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.5", + "@rolldown/binding-darwin-arm64": "1.1.5", + "@rolldown/binding-darwin-x64": "1.1.5", + "@rolldown/binding-freebsd-x64": "1.1.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", + "@rolldown/binding-linux-arm64-gnu": "1.1.5", + "@rolldown/binding-linux-arm64-musl": "1.1.5", + "@rolldown/binding-linux-ppc64-gnu": "1.1.5", + "@rolldown/binding-linux-s390x-gnu": "1.1.5", + "@rolldown/binding-linux-x64-gnu": "1.1.5", + "@rolldown/binding-linux-x64-musl": "1.1.5", + "@rolldown/binding-openharmony-arm64": "1.1.5", + "@rolldown/binding-wasm32-wasi": "1.1.5", + "@rolldown/binding-win32-arm64-msvc": "1.1.5", + "@rolldown/binding-win32-x64-msvc": "1.1.5" + } + }, + "node_modules/vitest": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz", + "integrity": "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.11", + "@vitest/mocker": "4.1.11", + "@vitest/pretty-format": "4.1.11", + "@vitest/runner": "4.1.11", + "@vitest/snapshot": "4.1.11", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.11", + "@vitest/browser-preview": "4.1.11", + "@vitest/browser-webdriverio": "4.1.11", + "@vitest/coverage-istanbul": "4.1.11", + "@vitest/coverage-v8": "4.1.11", + "@vitest/ui": "4.1.11", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/watchpack": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.1.tgz", + "integrity": "sha512-M0N4xzyzosiIok3svYlEo1sdLZts/8FPgYH/GPC3wvlmPoRvnoManGMrE54waYj3tISA8w6lsdesfVv67qSr8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^8.2.1", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + } + } +} diff --git a/BookieClient/package.json b/BookieClient/package.json new file mode 100644 index 0000000..fc5a73f --- /dev/null +++ b/BookieClient/package.json @@ -0,0 +1,38 @@ +{ + "name": "bookie-client", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "packageManager": "npm@11.13.0", + "dependencies": { + "@angular/animations": "^22.1.3", + "@angular/cdk": "^22.1.3", + "@angular/common": "^22.1.0", + "@angular/compiler": "^22.1.0", + "@angular/core": "^22.1.0", + "@angular/forms": "^22.1.0", + "@angular/material": "^22.1.3", + "@angular/platform-browser": "^22.1.0", + "@angular/router": "^22.1.0", + "chart.js": "^4.5.1", + "jspdf": "^4.2.1", + "jspdf-autotable": "^5.0.8", + "rxjs": "~7.8.0", + "tslib": "^2.3.0" + }, + "devDependencies": { + "@angular/build": "^22.1.5", + "@angular/cli": "^22.1.5", + "@angular/compiler-cli": "^22.1.0", + "jsdom": "^28.0.0", + "prettier": "^3.8.1", + "typescript": "~6.0.2", + "vitest": "^4.0.8" + } +} diff --git a/BookieClient/public/favicon.ico b/BookieClient/public/favicon.ico new file mode 100644 index 0000000..57614f9 Binary files /dev/null and b/BookieClient/public/favicon.ico differ diff --git a/BookieClient/public/fonts/Roboto-Regular.ttf b/BookieClient/public/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000..ddee473 Binary files /dev/null and b/BookieClient/public/fonts/Roboto-Regular.ttf differ diff --git a/BookieClient/src/app/app.config.ts b/BookieClient/src/app/app.config.ts new file mode 100644 index 0000000..fa369df --- /dev/null +++ b/BookieClient/src/app/app.config.ts @@ -0,0 +1,20 @@ +import { ApplicationConfig, provideBrowserGlobalErrorListeners } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { provideHttpClient, withInterceptors } from '@angular/common/http'; +import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; +import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field'; +import { provideNativeDateAdapter } from '@angular/material/core'; + +import { routes } from './app.routes'; +import { authInterceptor } from './core/interceptors/auth.interceptor'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideBrowserGlobalErrorListeners(), + provideRouter(routes), + provideHttpClient(withInterceptors([authInterceptor])), + provideAnimationsAsync(), + provideNativeDateAdapter(), + { provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { appearance: 'outline' } }, + ], +}; diff --git a/BookieClient/src/app/app.routes.ts b/BookieClient/src/app/app.routes.ts new file mode 100644 index 0000000..4fbbf72 --- /dev/null +++ b/BookieClient/src/app/app.routes.ts @@ -0,0 +1,29 @@ +import { Routes } from '@angular/router'; +import { authGuard } from './core/guards/auth.guard'; +import { ShellComponent } from './layout/shell.component'; +import { LoginComponent } from './features/auth/login.component'; +import { DashboardComponent } from './features/dashboard/dashboard.component'; +import { PreMatchComponent } from './features/pre-match/pre-match.component'; +import { CrudPageComponent } from './features/crud/crud-page.component'; +import { CRUD_CONFIGS } from './features/crud/crud-config'; + +export const routes: Routes = [ + { path: 'login', component: LoginComponent }, + { + path: '', + component: ShellComponent, + canActivate: [authGuard], + children: [ + { path: 'dashboard', component: DashboardComponent, title: 'Dashboard · Bookie' }, + { path: 'pre-match', component: PreMatchComponent, title: 'Pre-Match Reports · Bookie' }, + { path: 'leagues', component: CrudPageComponent, data: { config: CRUD_CONFIGS['leagues'] }, title: 'Leagues · Bookie' }, + { path: 'seasons', component: CrudPageComponent, data: { config: CRUD_CONFIGS['seasons'] }, title: 'Seasons · Bookie' }, + { path: 'teams', component: CrudPageComponent, data: { config: CRUD_CONFIGS['teams'] }, title: 'Teams · Bookie' }, + { path: 'players', component: CrudPageComponent, data: { config: CRUD_CONFIGS['players'] }, title: 'Players · Bookie' }, + { path: 'matches', component: CrudPageComponent, data: { config: CRUD_CONFIGS['matches'] }, title: 'Matches · Bookie' }, + { path: 'contracts', component: CrudPageComponent, data: { config: CRUD_CONFIGS['contracts'] }, title: 'Contracts · Bookie' }, + { path: '', redirectTo: 'dashboard', pathMatch: 'full' }, + ], + }, + { path: '**', redirectTo: '' }, +]; diff --git a/BookieClient/src/app/app.ts b/BookieClient/src/app/app.ts new file mode 100644 index 0000000..b9e0e2b --- /dev/null +++ b/BookieClient/src/app/app.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + +@Component({ + selector: 'app-root', + imports: [RouterOutlet], + template: '', +}) +export class App {} diff --git a/BookieClient/src/app/core/guards/auth.guard.ts b/BookieClient/src/app/core/guards/auth.guard.ts new file mode 100644 index 0000000..df26ebd --- /dev/null +++ b/BookieClient/src/app/core/guards/auth.guard.ts @@ -0,0 +1,19 @@ +import { inject } from '@angular/core'; +import { CanActivateFn, Router } from '@angular/router'; +import { AuthService } from '../services/auth.service'; + +export const authGuard: CanActivateFn = () => { + const auth = inject(AuthService); + const router = inject(Router); + if (auth.isLoggedIn()) return true; + router.navigate(['/login']); + return false; +}; + +export const adminGuard: CanActivateFn = () => { + const auth = inject(AuthService); + const router = inject(Router); + if (auth.isLoggedIn() && auth.isAdmin()) return true; + router.navigate(['/dashboard']); + return false; +}; diff --git a/BookieClient/src/app/core/interceptors/auth.interceptor.ts b/BookieClient/src/app/core/interceptors/auth.interceptor.ts new file mode 100644 index 0000000..5d35318 --- /dev/null +++ b/BookieClient/src/app/core/interceptors/auth.interceptor.ts @@ -0,0 +1,33 @@ +import { HttpInterceptorFn, HttpErrorResponse } from '@angular/common/http'; +import { inject } from '@angular/core'; +import { Router } from '@angular/router'; +import { catchError, throwError } from 'rxjs'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { AuthService } from '../services/auth.service'; + +export const authInterceptor: HttpInterceptorFn = (req, next) => { + const auth = inject(AuthService); + const router = inject(Router); + const snack = inject(MatSnackBar); + + const token = auth.token; + const authReq = token + ? req.clone({ setHeaders: { Authorization: `Bearer ${token}` } }) + : req; + + return next(authReq).pipe( + catchError((err: HttpErrorResponse) => { + if (err.status === 401) { + auth.logout(); + router.navigate(['/login']); + } else if (err.status === 403) { + snack.open('You do not have permission to perform this action.', 'Dismiss', { duration: 4000 }); + } else if (err.status === 0) { + snack.open('Cannot reach the API. Is the backend running?', 'Dismiss', { duration: 4000 }); + } else if (err.status >= 500) { + snack.open('Server error. Please try again later.', 'Dismiss', { duration: 4000 }); + } + return throwError(() => err); + }), + ); +}; diff --git a/BookieClient/src/app/core/models/models.ts b/BookieClient/src/app/core/models/models.ts new file mode 100644 index 0000000..74c6fba --- /dev/null +++ b/BookieClient/src/app/core/models/models.ts @@ -0,0 +1,441 @@ +// ---- Auth ---- +export interface LoginRequest { username: string; password: string; } +export interface AuthResponse { token: string; username: string; role: string; expiresAt: string; } + +// ---- Common ---- +export interface PagedResult { + items: T[]; + totalCount: number; + page: number; + pageSize: number; + totalPages: number; +} + +export interface PagedQuery { + page?: number; + pageSize?: number; + search?: string; + sortBy?: string; + sortDesc?: boolean; + filters?: Record; +} + +export interface Lookup { id: number; name: string; } + +// ---- Entities ---- +export interface League { + leagueId: number; + name: string; + country: string; + tierLevel: number; + competitionType: string; + source?: string | null; + seasonCount?: number; +} + +export interface Season { + seasonId: number; + leagueId: number; + leagueName?: string; + country?: string; + name: string; + startDate: string; + endDate?: string | null; +} + +export interface Team { + teamId: number; + name: string; + shortName?: string | null; + city?: string | null; + stadium?: string | null; + foundedDate?: string | null; +} + +export interface Player { + playerId: number; + fullName: string; + birthDate?: string | null; + nationality?: string | null; + primaryPosition?: string | null; +} + +export interface Match { + matchId: number; + matchdayId: number; + matchdayNumber?: number; + seasonId?: number; + seasonName?: string; + leagueId?: number; + leagueName?: string; + country?: string; + homeTeamId: number; + homeTeamName?: string; + awayTeamId: number; + awayTeamName?: string; + kickoffAt: string; + stadium?: string | null; + referee?: string | null; + status: string; + homeScoreHt?: number | null; + awayScoreHt?: number | null; + homeScoreFt?: number | null; + awayScoreFt?: number | null; + dataSource?: string | null; +} + +export interface PlayerContract { + contractId: number; + playerId: number; + playerName?: string; + teamId: number; + teamName?: string; + shirtNumber?: number | null; + startDate: string; + endDate?: string | null; + isCurrent?: boolean; +} + +// ---- Dashboard ---- +export interface DashboardSummary { + leagueCount: number; + seasonCount: number; + teamCount: number; + playerCount: number; + matchCount: number; + upcomingMatchesThisWeek: number; + finishedMatches: number; + nextMatches: UpcomingMatch[]; + statusBreakdown: StatusBreakdown[]; +} +export interface UpcomingMatch { + matchId: number; + kickoffAt: string; + homeTeamName: string; + awayTeamName: string; + leagueName: string; + country: string; + status: string; +} +export interface StatusBreakdown { status: string; count: number; } + +// ---- Pre-Match Report ---- +export interface PreMatchReport { + date: string; + matchCount: number; + seasonsBack: number; + groups: LeagueGroup[]; +} +export interface LeagueGroup { + leagueId: number; + leagueName: string; + country: string; + seasonId: number; + seasonName: string; + matches: MatchReport[]; + modelParams?: LeagueModelParam | null; +} +export interface MatchReport { + matchId: number; + kickoffAt: string; + status: string; + stadium?: string | null; + referee?: string | null; + homeTeamId: number; + homeTeamName: string; + awayTeamId: number; + awayTeamName: string; + homeScoreHt?: number | null; + awayScoreHt?: number | null; + homeScoreFt?: number | null; + awayScoreFt?: number | null; + hasScore: boolean; + seasonsIncluded: string[]; + home: TeamReport; + away: TeamReport; + odds?: MatchOddsSummary | null; + extraOdds: MatchExtraOdds[]; +} +export interface TeamReport { + teamId: number; + teamName: string; + matchesPlayed: number; + hasHistory: boolean; + goalsForAgainst: GoalsForAgainst; + seasonAverages: SeasonAverages; + form: FormResult[]; + topScorers: TopScorer[]; + prediction?: MatchTeamPrediction | null; + openAiPrediction?: MatchTeamOpenAiPrediction | null; + actual?: MatchTeamActual | null; + strength?: TeamStrength | null; + oddsApiName?: string | null; +} +export interface MatchTeamActual { + goals?: number | null; + shotsTotal?: number | null; + shotsOnTarget?: number | null; + corners?: number | null; + fouls?: number | null; + yellowCards: number; + redCards: number; + hasData: boolean; +} +export interface FormResult { + result: 'W' | 'D' | 'L' | string; + matchId: number; + kickoffAt: string; + opponentName: string; + isHome: boolean; + goalsFor: number; + goalsAgainst: number; +} +export interface GoalsForAgainst { + matchesPlayed: number; + avgGoalsFor?: number | null; + avgGoalsAgainst?: number | null; + hasData: boolean; +} +export interface SeasonAverages { + matchesPlayed: number; + possession?: number | null; + shotsTotal?: number | null; + shotsOnTarget?: number | null; + corners?: number | null; + fouls?: number | null; + offsides?: number | null; + yellowCards?: number | null; + redCards?: number | null; + hasData: boolean; +} +export interface TopScorer { playerName: string; goals: number; assists: number; } + +export interface LeagueModelParam { + homeAdvantage: number; + rho: number; + avgHomeGoals?: number | null; + avgAwayGoals?: number | null; + matchesUsed: number; + halfLifeDays?: number | null; + trainedAt: string; +} + +export interface TeamStrength { + logAttack: number; + logDefense: number; + attackFactor: number; + defenseFactor: number; + matchesUsed: number; + trainedAt: string; +} + +export interface MatchOddsSummary { + bookmakerCount: number; + avgHomeOdds: number; + avgDrawOdds: number; + avgAwayOdds: number; + homeImplied: number; + drawImplied: number; + awayImplied: number; + avgTotalLine?: number | null; + avgOverOdds?: number | null; + avgUnderOdds?: number | null; + overImplied?: number | null; + underImplied?: number | null; + totalsBookmakerCount?: number; + latestFetchedAt: string; +} + +export interface MatchExtraOdds { + market: string; + bookmaker: string; + line: number; + overOdds: number; + underOdds: number; + fetchedAt: string; +} + +// ---- Match details (drill-down) ---- +export interface MatchDetails { + matchId: number; + kickoffAt: string; + status: string; + stadium?: string | null; + referee?: string | null; + leagueName: string; + country: string; + seasonName: string; + matchdayNumber: number; + homeTeamId: number; + homeTeamName: string; + awayTeamId: number; + awayTeamName: string; + homeScoreHt?: number | null; + awayScoreHt?: number | null; + homeScoreFt?: number | null; + awayScoreFt?: number | null; + hasScore: boolean; + homeStats?: TeamMatchStats | null; + awayStats?: TeamMatchStats | null; + homePrediction?: MatchTeamPrediction | null; + awayPrediction?: MatchTeamPrediction | null; + hasPrediction: boolean; + homeOpenAiPrediction?: MatchTeamOpenAiPrediction | null; + awayOpenAiPrediction?: MatchTeamOpenAiPrediction | null; + hasOpenAiPrediction: boolean; + goals: GoalDetail[]; + cards: CardDetail[]; + penalties: PenaltyDetail[]; +} +export interface MatchTeamPrediction { + predictedGoals?: number | null; + predictedShotsTotal?: number | null; + predictedShotsOnTarget?: number | null; + predictedCorners?: number | null; + predictedFouls?: number | null; + predictedYellowCards?: number | null; + modelTrainedAt: string; + halfLifeDays?: number | null; + predictedAt: string; +} +export interface MatchTeamOpenAiPrediction { + predictedGoals?: number | null; + predictedShotsOnTarget?: number | null; + predictedCorners?: number | null; + predictedFouls?: number | null; + predictedYellowCards?: number | null; + predictedRedCards?: number | null; + confidence?: string | null; + model?: string | null; + predictedAt: string; +} +export interface TeamMatchStats { + possessionPct?: number | null; + shotsTotal?: number | null; + shotsOnTarget?: number | null; + corners?: number | null; + fouls?: number | null; + offsides?: number | null; + yellowCards: number; + redCards: number; +} +export interface GoalDetail { + teamId: number; isHome: boolean; scorerName: string; assistName?: string | null; + minute: number; addedTime: number; goalType: string; +} +export interface CardDetail { + teamId: number; isHome: boolean; playerName: string; minute: number; cardType: string; reason?: string | null; +} +export interface PenaltyDetail { + teamId: number; isHome: boolean; playerName?: string | null; minute?: number | null; result: string; +} + +// ---- Head-to-head ---- +export interface HeadToHead { + teamAId: number; + teamAName: string; + teamBId: number; + teamBName: string; + totalMeetings: number; + teamAWins: number; + draws: number; + teamBWins: number; + teamAGoals: number; + teamBGoals: number; + hasData: boolean; + meetings: HeadToHeadMatch[]; +} +export interface HeadToHeadMatch { + matchId: number; + kickoffAt: string; + status: string; + leagueName: string; + country: string; + seasonName: string; + homeTeamId: number; + homeTeamName: string; + awayTeamId: number; + awayTeamName: string; + homeScoreFt?: number | null; + awayScoreFt?: number | null; +} + +// ---- Predictions (OpenAI-powered) ---- +export interface MetricEstimate { estimate: number; low: number; high: number; } +export interface TeamPrediction { + goals: MetricEstimate; + shotsOnTarget: MetricEstimate; + corners: MetricEstimate; + fouls: MetricEstimate; + yellowCards: MetricEstimate; + redCards: MetricEstimate; +} +export interface MatchPrediction { + matchId: number; + homeTeam: string; + awayTeam: string; + league: string; + country?: string | null; + kickoffAt: string; + home: TeamPrediction; + away: TeamPrediction; + reasoning: string; + confidence: 'High' | 'Medium' | 'Low' | string; + flags: string[]; + model: string; +} + +// ---- Player & team stats ---- +export interface PlayerStats { + playerId: number; + fullName: string; + nationality?: string | null; + primaryPosition?: string | null; + birthDate?: string | null; + currentTeam?: string | null; + totalGoals: number; + totalAssists: number; + matchesScored: number; + goalsOpenPlay: number; + goalsPenalty: number; + goalsOwn: number; + yellowCards: number; + redCards: number; + hasData: boolean; + seasons: PlayerSeasonStat[]; + recentGoals: PlayerGoal[]; +} +export interface PlayerSeasonStat { seasonName: string; leagueName: string; goals: number; assists: number; } +export interface PlayerGoal { + matchId: number; kickoffAt: string; homeTeamName: string; awayTeamName: string; + minute: number; addedTime: number; goalType: string; +} + +export interface TeamStats { + teamId: number; + name: string; + city?: string | null; + stadium?: string | null; + played: number; + wins: number; + draws: number; + losses: number; + goalsFor: number; + goalsAgainst: number; + goalDifference: number; + winPct: number; + hasData: boolean; + averages: SeasonAverages; + form: FormResult[]; + topScorers: TopScorer[]; + seasons: TeamSeasonStat[]; + recentMatches: TeamRecentMatch[]; +} +export interface TeamSeasonStat { + seasonName: string; leagueName: string; played: number; + wins: number; draws: number; losses: number; goalsFor: number; goalsAgainst: number; +} +export interface TeamRecentMatch { + matchId: number; kickoffAt: string; leagueName: string; seasonName: string; + homeTeamName: string; awayTeamName: string; homeScoreFt?: number | null; awayScoreFt?: number | null; +} diff --git a/BookieClient/src/app/core/services/api.service.ts b/BookieClient/src/app/core/services/api.service.ts new file mode 100644 index 0000000..77b18b2 --- /dev/null +++ b/BookieClient/src/app/core/services/api.service.ts @@ -0,0 +1,113 @@ +import { Injectable, inject } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { environment } from '../../../environments/environment'; +import { + DashboardSummary, HeadToHead, League, Lookup, Match, MatchDetails, MatchPrediction, PagedQuery, + PagedResult, Player, PlayerContract, PlayerStats, PreMatchReport, Season, Team, TeamStats, +} from '../models/models'; + +/** Turns a PagedQuery into HttpParams, omitting empty values. */ +function toParams(query: PagedQuery): HttpParams { + let params = new HttpParams(); + if (query.page != null) params = params.set('page', query.page); + if (query.pageSize != null) params = params.set('pageSize', query.pageSize); + if (query.search) params = params.set('search', query.search); + if (query.sortBy) params = params.set('sortBy', query.sortBy); + if (query.sortDesc != null) params = params.set('sortDesc', query.sortDesc); + if (query.filters) { + for (const [key, value] of Object.entries(query.filters)) { + if (value != null && value !== '') params = params.append('Filters', `${key}:${value}`); + } + } + return params; +} + +/** Generic CRUD client for a REST resource exposed by the API. */ +export class CrudClient { + constructor(private http: HttpClient, private resource: string) {} + private get base() { return `${environment.apiBaseUrl}/${this.resource}`; } + + getPaged(query: PagedQuery): Observable> { + return this.http.get>(this.base, { params: toParams(query) }); + } + getById(id: number): Observable { + return this.http.get(`${this.base}/${id}`); + } + create(dto: TWrite): Observable { + return this.http.post(this.base, dto); + } + update(id: number, dto: TWrite): Observable { + return this.http.put(`${this.base}/${id}`, dto); + } + delete(id: number): Observable { + return this.http.delete(`${this.base}/${id}`); + } +} + +@Injectable({ providedIn: 'root' }) +export class ApiService { + private http = inject(HttpClient); + private get base() { return environment.apiBaseUrl; } + + readonly leagues = new CrudClient>(this.http, 'leagues'); + readonly seasons = new CrudClient>(this.http, 'seasons'); + readonly teams = new CrudClient>(this.http, 'teams'); + readonly players = new CrudClient>(this.http, 'players'); + readonly matches = new CrudClient>(this.http, 'matches'); + readonly contracts = new CrudClient>(this.http, 'player-contracts'); + + getDashboard(): Observable { + return this.http.get(`${this.base}/dashboard/summary`); + } + + getPreMatchReport(date: string, seasonsBack = 0): Observable { + return this.http.get(`${this.base}/reports/pre-match`, { + params: new HttpParams().set('date', date).set('seasonsBack', seasonsBack), + }); + } + + getMatchDetails(matchId: number): Observable { + return this.http.get(`${this.base}/reports/match/${matchId}`); + } + + getHeadToHead(teamAId: number, teamBId: number, beforeMatchId?: number): Observable { + let params = new HttpParams().set('teamAId', teamAId).set('teamBId', teamBId); + if (beforeMatchId != null) params = params.set('beforeMatchId', beforeMatchId); + return this.http.get(`${this.base}/reports/head-to-head`, { params }); + } + + predictMatch(matchId: number): Observable { + return this.http.post(`${this.base}/predictions/match/${matchId}`, {}); + } + + predictMatches(matchIds: number[]): Observable { + return this.http.post(`${this.base}/predictions/matches`, { matchIds }); + } + + getPlayerStats(playerId: number): Observable { + return this.http.get(`${this.base}/players/${playerId}/stats`); + } + + getTeamStats(teamId: number): Observable { + return this.http.get(`${this.base}/teams/${teamId}/stats`); + } + + lookup( + type: 'leagues' | 'seasons' | 'teams' | 'players' | 'matchdays', + params?: Record, + ): Observable { + let httpParams = new HttpParams(); + if (params) { + for (const [k, v] of Object.entries(params)) { + if (v != null && v !== '') httpParams = httpParams.set(k, v); + } + } + return this.http.get(`${this.base}/lookups/${type}`, { params: httpParams }); + } + + /** Builds a generic CRUD client for any REST resource (used by the metadata-driven CRUD page). */ + crud(resource: string): CrudClient { + return new CrudClient(this.http, resource); + } +} diff --git a/BookieClient/src/app/core/services/auth.service.ts b/BookieClient/src/app/core/services/auth.service.ts new file mode 100644 index 0000000..204b021 --- /dev/null +++ b/BookieClient/src/app/core/services/auth.service.ts @@ -0,0 +1,56 @@ +import { Injectable, computed, signal } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable, tap } from 'rxjs'; +import { environment } from '../../../environments/environment'; +import { AuthResponse, LoginRequest } from '../models/models'; + +const STORAGE_KEY = 'bookie.auth'; + +@Injectable({ providedIn: 'root' }) +export class AuthService { + private readonly _auth = signal(this.restore()); + + readonly auth = this._auth.asReadonly(); + readonly isLoggedIn = computed(() => { + const a = this._auth(); + return !!a && new Date(a.expiresAt).getTime() > Date.now(); + }); + readonly username = computed(() => this._auth()?.username ?? ''); + readonly role = computed(() => this._auth()?.role ?? ''); + readonly isAdmin = computed(() => this.role() === 'admin'); + + constructor(private http: HttpClient) {} + + login(request: LoginRequest): Observable { + return this.http.post(`${environment.apiBaseUrl}/auth/login`, request).pipe( + tap((res) => { + localStorage.setItem(STORAGE_KEY, JSON.stringify(res)); + this._auth.set(res); + }), + ); + } + + logout(): void { + localStorage.removeItem(STORAGE_KEY); + this._auth.set(null); + } + + get token(): string | null { + return this._auth()?.token ?? null; + } + + private restore(): AuthResponse | null { + const raw = localStorage.getItem(STORAGE_KEY); + if (!raw) return null; + try { + const parsed = JSON.parse(raw) as AuthResponse; + if (new Date(parsed.expiresAt).getTime() <= Date.now()) { + localStorage.removeItem(STORAGE_KEY); + return null; + } + return parsed; + } catch { + return null; + } + } +} diff --git a/BookieClient/src/app/core/utils/pdf-fonts.ts b/BookieClient/src/app/core/utils/pdf-fonts.ts new file mode 100644 index 0000000..86ce47b --- /dev/null +++ b/BookieClient/src/app/core/utils/pdf-fonts.ts @@ -0,0 +1,50 @@ +import jsPDF from 'jspdf'; +import type { UserOptions } from 'jspdf-autotable'; + +const FONT_FILE = 'Roboto-Regular.ttf'; +export const PDF_FONT_FAMILY = 'Roboto'; + +let fontBinary: string | null = null; +let fontLoadPromise: Promise | null = null; + +function arrayBufferToBinaryString(buffer: ArrayBuffer): string { + const bytes = new Uint8Array(buffer); + const chunkSize = 0x8000; + let binary = ''; + for (let i = 0; i < bytes.length; i += chunkSize) { + binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize)); + } + return binary; +} + +async function loadFontBinary(): Promise { + if (fontBinary) return fontBinary; + if (!fontLoadPromise) { + fontLoadPromise = fetch(`/fonts/${FONT_FILE}`) + .then(async (res) => { + if (!res.ok) throw new Error(`Failed to load PDF font (${res.status})`); + return arrayBufferToBinaryString(await res.arrayBuffer()); + }) + .then((binary) => { + fontBinary = binary; + return binary; + }); + } + return fontLoadPromise; +} + +/** Registers Roboto (UTF-8 / Polish) on the given jsPDF instance. */ +export async function registerPdfUnicodeFont(doc: jsPDF): Promise { + const binary = await loadFontBinary(); + const fonts = (doc as unknown as { getFontList?: () => Record }).getFontList?.(); + if (!fonts?.[PDF_FONT_FAMILY]) { + doc.addFileToVFS(FONT_FILE, binary); + doc.addFont(FONT_FILE, PDF_FONT_FAMILY, 'normal'); + } + doc.setFont(PDF_FONT_FAMILY, 'normal'); +} + +export const pdfTableFontStyles: Partial = { + styles: { font: PDF_FONT_FAMILY, fontStyle: 'normal' }, + headStyles: { font: PDF_FONT_FAMILY, fontStyle: 'normal' }, +}; diff --git a/BookieClient/src/app/core/utils/prediction-analysis-export.ts b/BookieClient/src/app/core/utils/prediction-analysis-export.ts new file mode 100644 index 0000000..9eb24aa --- /dev/null +++ b/BookieClient/src/app/core/utils/prediction-analysis-export.ts @@ -0,0 +1,368 @@ +import { Chart, ChartConfiguration, registerables } from 'chart.js'; +import jsPDF from 'jspdf'; +import autoTable from 'jspdf-autotable'; +import { + MatchReport, MatchTeamActual, MatchTeamOpenAiPrediction, MatchTeamPrediction, + PreMatchReport, TeamReport, +} from '../models/models'; +import { pdfTableFontStyles, PDF_FONT_FAMILY, registerPdfUnicodeFont } from './pdf-fonts'; + +Chart.register(...registerables); + +export interface AnalysisExportResult { + included: number; + skipped: number; +} + +interface MetricDef { + label: string; + llm: (p: MatchTeamPrediction) => number | null | undefined; + openai: (p: MatchTeamOpenAiPrediction) => number | null | undefined; + actual: (a: MatchTeamActual) => number | null | undefined; + /** When true, row is included with LLM + actual even if OpenAI has no value for this metric. */ + openAiOptional?: boolean; +} + +const METRICS: MetricDef[] = [ + { label: 'Goals', llm: (p) => p.predictedGoals, openai: (p) => p.predictedGoals, actual: (a) => a.goals }, + { + label: 'Shots', + llm: (p) => p.predictedShotsTotal, + openai: () => null, + actual: (a) => a.shotsTotal, + openAiOptional: true, + }, + { label: 'On target', llm: (p) => p.predictedShotsOnTarget, openai: (p) => p.predictedShotsOnTarget, actual: (a) => a.shotsOnTarget }, + { label: 'Corners', llm: (p) => p.predictedCorners, openai: (p) => p.predictedCorners, actual: (a) => a.corners }, + { label: 'Fouls', llm: (p) => p.predictedFouls, openai: (p) => p.predictedFouls, actual: (a) => a.fouls }, + { label: 'Yellow cards', llm: (p) => p.predictedYellowCards, openai: (p) => p.predictedYellowCards, actual: (a) => a.yellowCards }, +]; + +interface AnalyzableMatch { + match: MatchReport; + league: string; + country: string; + season: string; +} + +interface MetricSample { + metric: string; + llm: number; + openai: number | null; + actual: number; + llmErr: number; + openaiErr: number | null; + matchLabel: string; + teamName: string; +} + +function teamHasTriple(t: TeamReport): boolean { + return !!(t.prediction && t.openAiPrediction && t.actual?.hasData); +} + +function matchQualifies(m: MatchReport): boolean { + return m.status === 'finished' && teamHasTriple(m.home) && teamHasTriple(m.away); +} + +function n(v: number | null | undefined): number | null { + return v == null || Number.isNaN(Number(v)) ? null : Number(v); +} + +function fmt(v: number | null | undefined): string { + if (v == null) return '—'; + return Number.isInteger(v) ? `${v}` : v.toFixed(2); +} + +function delta(actual: number, pred: number): string { + const d = Math.round((actual - pred) * 100) / 100; + const sign = d > 0 ? '+' : ''; + return `${sign}${Number.isInteger(d) ? d : d.toFixed(2)}`; +} + +function collectAnalyzable(report: PreMatchReport): { included: AnalyzableMatch[]; skipped: number } { + const included: AnalyzableMatch[] = []; + let skipped = 0; + for (const g of report.groups) { + for (const m of g.matches) { + if (m.status !== 'finished') continue; + if (matchQualifies(m)) { + included.push({ match: m, league: g.leagueName, country: g.country, season: g.seasonName }); + } else { + skipped++; + } + } + } + return { included, skipped }; +} + +function collectSamples(matches: AnalyzableMatch[]): MetricSample[] { + const samples: MetricSample[] = []; + for (const { match: m } of matches) { + for (const [side, t] of [['Home', m.home], ['Away', m.away]] as const) { + const llm = t.prediction!; + const openai = t.openAiPrediction!; + const actual = t.actual!; + const label = `${m.homeTeamName} vs ${m.awayTeamName} (${side}: ${t.teamName})`; + for (const def of METRICS) { + const lv = n(def.llm(llm)); + const ov = n(def.openai(openai)); + const av = n(def.actual(actual)); + if (lv == null || av == null) continue; + if (!def.openAiOptional && ov == null) continue; + samples.push({ + metric: def.label, + llm: lv, + openai: ov, + actual: av, + llmErr: Math.abs(av - lv), + openaiErr: ov != null ? Math.abs(av - ov) : null, + matchLabel: label, + teamName: t.teamName, + }); + } + } + } + return samples; +} + +function mae(samples: MetricSample[], key: 'llmErr' | 'openaiErr'): number { + const usable = key === 'openaiErr' + ? samples.filter((s) => s.openaiErr != null) + : samples; + if (!usable.length) return 0; + return usable.reduce((s, x) => s + (key === 'openaiErr' ? x.openaiErr! : x.llmErr), 0) / usable.length; +} + +function maeByMetric(samples: MetricSample[], key: 'llmErr' | 'openaiErr'): Record { + const acc: Record = {}; + for (const s of samples) { + const err = key === 'openaiErr' ? s.openaiErr : s.llmErr; + if (err == null) continue; + if (!acc[s.metric]) acc[s.metric] = { sum: 0, n: 0 }; + acc[s.metric].sum += err; + acc[s.metric].n++; + } + const out: Record = {}; + for (const [metric, v] of Object.entries(acc)) { + out[metric] = v.n ? v.sum / v.n : 0; + } + return out; +} + +function buildNarrative(samples: MetricSample[], included: number, skipped: number): string[] { + const lines: string[] = []; + const llmMae = mae(samples, 'llmErr'); + const openaiMae = mae(samples, 'openaiErr'); + const llmByMetric = maeByMetric(samples, 'llmErr'); + const openaiByMetric = maeByMetric(samples, 'openaiErr'); + + lines.push( + `This report compares stored LLM and OpenAI projections against actual match statistics for ${included} finished fixture(s) ` + + `where both teams had complete LLM, OpenAI, and actual data. ${skipped} finished match(es) were excluded due to missing data.`, + ); + + if (samples.length === 0) { + lines.push('No comparable metric samples were available for analysis.'); + return lines; + } + + const winner = llmMae < openaiMae - 0.05 ? 'LLM' + : openaiMae < llmMae - 0.05 ? 'OpenAI' : 'both models'; + lines.push( + `Overall mean absolute error: LLM ${llmMae.toFixed(2)}, OpenAI ${openaiMae.toFixed(2)}. ` + + (winner === 'both models' + ? 'Both models performed similarly on average.' + : `${winner} was closer to actual outcomes on average.`), + ); + + let bestMetric = ''; + let bestLlm = Infinity; + for (const [metric, err] of Object.entries(llmByMetric)) { + if (err < bestLlm) { bestLlm = err; bestMetric = metric; } + } + if (bestMetric) { + lines.push(`Strongest area (lowest LLM error): ${bestMetric} (MAE ${bestLlm.toFixed(2)}).`); + } + + let worstMetric = ''; + let worstLlm = -1; + for (const [metric, err] of Object.entries(llmByMetric)) { + if (err > worstLlm) { worstLlm = err; worstMetric = metric; } + } + if (worstMetric) { + lines.push(`Weakest area (highest LLM error): ${worstMetric} (MAE ${worstLlm.toFixed(2)}).`); + } + + const sorted = [...samples].sort((a, b) => b.llmErr - a.llmErr); + const worst = sorted.slice(0, 3); + if (worst.length) { + lines.push('Largest LLM misses: ' + worst.map((w) => + `${w.metric} in ${w.matchLabel} (pred ${fmt(w.llm)}, actual ${fmt(w.actual)}, error ${w.llmErr.toFixed(2)})`, + ).join('; ') + '.'); + } + + const good = samples.filter((s) => s.llmErr <= 0.5 && s.openaiErr != null && s.openaiErr <= 0.5); + if (good.length) { + lines.push(`${good.length} team-metric sample(s) were within 0.5 of actual for both models (excellent agreement).`); + } + + const comparable = samples.filter((s) => s.openaiErr != null); + const openaiWins = comparable.filter((s) => s.openaiErr! < s.llmErr).length; + const llmWins = comparable.filter((s) => s.llmErr < s.openaiErr!).length; + lines.push(`Head-to-head per metric: OpenAI closer ${openaiWins} time(s), LLM closer ${llmWins} time(s).`); + + for (const def of METRICS) { + const le = llmByMetric[def.label]; + const oe = openaiByMetric[def.label]; + if (le == null || oe == null) continue; + if (le < oe - 0.15) lines.push(`Good — LLM outperformed OpenAI on ${def.label.toLowerCase()} (MAE ${le.toFixed(2)} vs ${oe.toFixed(2)}).`); + else if (oe < le - 0.15) lines.push(`Concern — OpenAI was more accurate than LLM on ${def.label.toLowerCase()} (MAE ${oe.toFixed(2)} vs ${le.toFixed(2)}).`); + } + + return lines; +} + +async function chartToDataUrl(config: ChartConfiguration): Promise { + const canvas = document.createElement('canvas'); + canvas.width = 640; + canvas.height = 320; + const chart = new Chart(canvas, config); + await new Promise((r) => setTimeout(r, 50)); + const url = canvas.toDataURL('image/png', 1); + chart.destroy(); + return url; +} + +async function maeChart(samples: MetricSample[]): Promise { + const llmBy = maeByMetric(samples, 'llmErr'); + const openaiBy = maeByMetric(samples, 'openaiErr'); + const labels = METRICS.map((m) => m.label).filter((l) => llmBy[l] != null); + if (!labels.length) return null; + + return chartToDataUrl({ + type: 'bar', + data: { + labels, + datasets: [ + { label: 'LLM MAE', data: labels.map((l) => llmBy[l]), backgroundColor: '#7e57c2', borderRadius: 4 }, + { label: 'OpenAI MAE', data: labels.map((l) => openaiBy[l] ?? null), backgroundColor: '#ef6c00', borderRadius: 4 }, + ], + }, + options: { + responsive: false, + plugins: { legend: { position: 'bottom' }, title: { display: true, text: 'Mean absolute error by metric' } }, + scales: { y: { beginAtZero: true, title: { display: true, text: 'MAE (lower is better)' } } }, + }, + }); +} + +function teamTableBody(t: TeamReport): (string | number)[][] { + const llm = t.prediction!; + const openai = t.openAiPrediction!; + const actual = t.actual!; + return METRICS.map((def) => { + const lv = n(def.llm(llm)); + const ov = n(def.openai(openai)); + const av = n(def.actual(actual)); + if (lv == null || av == null) return null; + if (!def.openAiOptional && ov == null) return null; + return [ + def.label, + fmt(lv), + fmt(ov), + fmt(av), + delta(av, lv), + ov != null ? delta(av, ov) : '—', + ov == null ? '—' : (Math.abs(av - lv) <= Math.abs(av - ov) ? 'LLM' : 'OpenAI'), + ]; + }).filter((r): r is string[] => r != null); +} + +export function countAnalyzableMatches(report: PreMatchReport): number { + return collectAnalyzable(report).included.length; +} + +/** PDF analysis for finished matches with complete LLM + OpenAI + actual data for both teams. */ +export async function exportPredictionAnalysisPdf(report: PreMatchReport): Promise { + const { included, skipped } = collectAnalyzable(report); + const samples = collectSamples(included); + + const doc = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' }); + await registerPdfUnicodeFont(doc); + const pageW = doc.internal.pageSize.getWidth(); + const pageH = doc.internal.pageSize.getHeight(); + let y = 40; + + doc.setFontSize(16); + doc.text(`Prediction Analysis — ${report.date}`, 40, y); + y += 22; + doc.setFontSize(10); + doc.setTextColor(100); + doc.text(`${included.length} match(es) included · ${skipped} finished match(es) skipped (incomplete data)`, 40, y); + doc.setTextColor(0); + y += 20; + + doc.setFontSize(12); + doc.text('Executive summary', 40, y); + y += 14; + doc.setFontSize(9); + for (const line of buildNarrative(samples, included.length, skipped)) { + const wrapped = doc.splitTextToSize(line, pageW - 80); + if (y + wrapped.length * 11 > pageH - 60) { doc.addPage(); y = 40; } + doc.text(wrapped, 40, y); + y += wrapped.length * 11 + 6; + } + + const chartUrl = await maeChart(samples); + if (chartUrl) { + if (y + 200 > pageH - 40) { doc.addPage(); y = 40; } + y += 8; + doc.setFontSize(12); + doc.text('Accuracy overview', 40, y); + y += 10; + doc.addImage(chartUrl, 'PNG', 40, y, pageW - 80, 180); + y += 190; + } + + for (const item of included) { + const m = item.match; + if (y > pageH - 120) { doc.addPage(); y = 40; } + + doc.setFontSize(11); + doc.setTextColor(21, 101, 192); + const kickoff = new Date(m.kickoffAt).toLocaleString(); + const score = `${m.homeScoreFt}:${m.awayScoreFt}`; + doc.text(`${m.homeTeamName} ${score} ${m.awayTeamName}`, 40, y); + y += 12; + doc.setFontSize(8); + doc.setTextColor(100); + doc.text(`${item.league} (${item.country}) · ${item.season} · ${kickoff}`, 40, y); + doc.setTextColor(0); + y += 14; + + for (const [side, t] of [['Home', m.home], ['Away', m.away]] as const) { + const body = teamTableBody(t); + if (!body.length) continue; + + autoTable(doc, { + startY: y, + head: [[`${side}: ${t.teamName}`, 'LLM', 'OpenAI', 'Actual', 'LLM Δ', 'OpenAI Δ', 'Closer']], + body, + ...pdfTableFontStyles, + styles: { ...pdfTableFontStyles.styles, fontSize: 8, cellPadding: 3 }, + headStyles: { + ...pdfTableFontStyles.headStyles, + fillColor: side === 'Home' ? [94, 53, 177] : [239, 108, 0], + }, + margin: { left: 40, right: 40 }, + }); + doc.setFont(PDF_FONT_FAMILY, 'normal'); + y = (doc as unknown as { lastAutoTable: { finalY: number } }).lastAutoTable.finalY + 10; + } + + y += 8; + } + + doc.save(`prediction-analysis-${report.date}.pdf`); + return { included: included.length, skipped }; +} diff --git a/BookieClient/src/app/core/utils/report-export.ts b/BookieClient/src/app/core/utils/report-export.ts new file mode 100644 index 0000000..6ea8cae --- /dev/null +++ b/BookieClient/src/app/core/utils/report-export.ts @@ -0,0 +1,203 @@ +import jsPDF from 'jspdf'; +import autoTable from 'jspdf-autotable'; +import { FormResult, MatchPrediction, MetricEstimate, PreMatchReport, TeamReport } from '../models/models'; +import { pdfTableFontStyles, registerPdfUnicodeFont } from './pdf-fonts'; + +function formZ(form: FormResult[]): string { + return form.length ? form.map((f) => f.result).join(' ') : '-'; +} + +function scorers(team: TeamReport): string { + if (!team.topScorers.length) return 'no data'; + return team.topScorers.map((s) => `${s.playerName} (${s.goals}g/${s.assists}a)`).join('; '); +} + +function csvCell(value: unknown): string { + const s = value == null ? '' : String(value); + return `"${s.replace(/"/g, '""')}"`; +} + +/** Flattens the report into CSV rows (one row per team per match) and triggers a download. */ +export function exportReportCsv(report: PreMatchReport): void { + const header = [ + 'Country', 'League', 'Season', 'Kickoff', 'Status', 'Match', 'Side', 'Team', + 'MatchesPlayed', 'AvgGoalsFor', 'AvgGoalsAgainst', 'Possession', 'Shots', 'ShotsOnTarget', + 'Corners', 'Fouls', 'Offsides', 'Yellow', 'Red', 'Form', 'TopScorers', + ]; + const rows: string[] = [header.map(csvCell).join(',')]; + + for (const g of report.groups) { + for (const m of g.matches) { + const matchLabel = `${m.homeTeamName} vs ${m.awayTeamName}`; + for (const [side, t] of [['Home', m.home], ['Away', m.away]] as const) { + const a = t.seasonAverages; + rows.push([ + g.country, g.leagueName, g.seasonName, m.kickoffAt, m.status, matchLabel, side, t.teamName, + t.matchesPlayed, t.goalsForAgainst.avgGoalsFor ?? '', t.goalsForAgainst.avgGoalsAgainst ?? '', + a.possession ?? '', a.shotsTotal ?? '', a.shotsOnTarget ?? '', a.corners ?? '', + a.fouls ?? '', a.offsides ?? '', a.yellowCards ?? '', a.redCards ?? '', + formZ(t.form), scorers(t), + ].map(csvCell).join(',')); + } + } + } + + downloadBlob(rows.join('\n'), `pre-match-report-${report.date}.csv`, 'text/csv;charset=utf-8;'); +} + +/** Renders the report into a multi-section PDF and triggers a download. */ +export async function exportReportPdf(report: PreMatchReport): Promise { + const doc = new jsPDF({ orientation: 'landscape', unit: 'pt', format: 'a4' }); + await registerPdfUnicodeFont(doc); + doc.setFontSize(16); + doc.text(`Pre-Match Report — ${report.date}`, 40, 40); + doc.setFontSize(10); + doc.text(`${report.matchCount} match(es)`, 40, 58); + + let cursorY = 76; + + for (const g of report.groups) { + doc.setFontSize(12); + doc.text(`${g.leagueName} (${g.country}) — ${g.seasonName}`, 40, cursorY); + cursorY += 8; + + const body: (string | number)[][] = []; + for (const m of g.matches) { + const kickoff = new Date(m.kickoffAt).toLocaleString(); + const score = m.hasScore ? `${m.homeScoreFt}:${m.awayScoreFt}` : '-'; + body.push([`${kickoff} | ${m.homeTeamName} vs ${m.awayTeamName} (${m.status}) ${score}`, '', '', '']); + for (const [side, t] of [['H', m.home], ['A', m.away]] as const) { + const a = t.seasonAverages; + body.push([ + ` ${side}: ${t.teamName}`, + t.goalsForAgainst.hasData + ? `GF ${t.goalsForAgainst.avgGoalsFor} / GA ${t.goalsForAgainst.avgGoalsAgainst}` + : 'no history', + a.hasData + ? `Pos ${a.possession}%, Sh ${a.shotsTotal}(${a.shotsOnTarget}), Cor ${a.corners}, Fouls ${a.fouls}, Off ${a.offsides}, Y ${a.yellowCards}, R ${a.redCards}` + : 'no stats', + `Form ${formZ(t.form)} | ${scorers(t)}`, + ]); + } + } + + autoTable(doc, { + startY: cursorY, + head: [['Match / Team', 'Goals', 'Season averages', 'Form & scorers']], + body, + ...pdfTableFontStyles, + styles: { ...pdfTableFontStyles.styles, fontSize: 7, cellPadding: 2, overflow: 'linebreak' }, + headStyles: { ...pdfTableFontStyles.headStyles, fillColor: [21, 101, 192] }, + columnStyles: { 0: { cellWidth: 200 }, 1: { cellWidth: 90 }, 2: { cellWidth: 320 }, 3: { cellWidth: 'auto' } }, + margin: { left: 40, right: 40 }, + }); + + cursorY = (doc as unknown as { lastAutoTable: { finalY: number } }).lastAutoTable.finalY + 24; + if (cursorY > 520) { doc.addPage(); cursorY = 40; } + } + + doc.save(`pre-match-report-${report.date}.pdf`); +} + +function metricCell(m: MetricEstimate): string { + const r = (n: number) => (Math.round(n * 10) / 10).toString(); + return `${r(m.estimate)} (${r(m.low)}–${r(m.high)})`; +} + +/** Renders one or more match predictions into a PDF and triggers a download. */ +export async function exportPredictionsPdf(predictions: MatchPrediction[]): Promise { + const doc = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' }); + await registerPdfUnicodeFont(doc); + const pageHeight = doc.internal.pageSize.getHeight(); + + doc.setFontSize(16); + doc.text('Match Statistics Projection', 40, 40); + doc.setFontSize(9); + doc.setTextColor(120); + doc.text( + `Generated by ${predictions[0]?.model ?? 'AI'} · statistical estimate for analytical purposes only — not a guaranteed outcome.`, + 40, 56, + ); + doc.setTextColor(0); + + let cursorY = 78; + + const metrics: { label: string; key: keyof MatchPrediction['home'] }[] = [ + { label: 'Goals', key: 'goals' }, + { label: 'Shots on target', key: 'shotsOnTarget' }, + { label: 'Corners', key: 'corners' }, + { label: 'Fouls', key: 'fouls' }, + { label: 'Yellow cards', key: 'yellowCards' }, + { label: 'Red cards', key: 'redCards' }, + ]; + + for (const p of predictions) { + if (cursorY > pageHeight - 140) { doc.addPage(); cursorY = 40; } + + doc.setFontSize(12); + doc.text(`${p.homeTeam} vs ${p.awayTeam}`, 40, cursorY); + cursorY += 14; + doc.setFontSize(9); + doc.setTextColor(120); + const kickoff = new Date(p.kickoffAt).toLocaleString(); + doc.text(`${p.league} · ${kickoff} · Confidence: ${p.confidence}`, 40, cursorY); + doc.setTextColor(0); + cursorY += 8; + + const body = metrics.map((row) => [ + row.label, + metricCell(p.home[row.key]), + metricCell(p.away[row.key]), + ]); + + autoTable(doc, { + startY: cursorY, + head: [['Expected', p.homeTeam, p.awayTeam]], + body, + ...pdfTableFontStyles, + styles: { ...pdfTableFontStyles.styles, fontSize: 9, cellPadding: 4 }, + headStyles: { ...pdfTableFontStyles.headStyles, fillColor: [106, 27, 154] }, + columnStyles: { 0: { cellWidth: 140, fontStyle: 'normal' } }, + margin: { left: 40, right: 40 }, + }); + + cursorY = (doc as unknown as { lastAutoTable: { finalY: number } }).lastAutoTable.finalY + 14; + + if (p.reasoning) { + const lines = doc.splitTextToSize(p.reasoning, doc.internal.pageSize.getWidth() - 80); + if (cursorY + lines.length * 12 > pageHeight - 40) { doc.addPage(); cursorY = 40; } + doc.setFontSize(9); + doc.text(lines, 40, cursorY); + cursorY += lines.length * 12 + 6; + } + + if (p.flags?.length) { + doc.setFontSize(8); + doc.setTextColor(180, 120, 0); + for (const f of p.flags) { + if (cursorY > pageHeight - 40) { doc.addPage(); cursorY = 40; } + doc.text(`! ${f}`, 40, cursorY); + cursorY += 11; + } + doc.setTextColor(0); + } + + cursorY += 18; + } + + const stamp = new Date().toISOString().slice(0, 10); + const name = predictions.length === 1 + ? `prediction-${predictions[0].homeTeam}-vs-${predictions[0].awayTeam}-${stamp}.pdf`.replace(/\s+/g, '-') + : `predictions-${predictions.length}-matches-${stamp}.pdf`; + doc.save(name); +} + +function downloadBlob(content: string, filename: string, type: string): void { + const blob = new Blob([content], { type }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + a.click(); + URL.revokeObjectURL(url); +} diff --git a/BookieClient/src/app/features/auth/login.component.html b/BookieClient/src/app/features/auth/login.component.html new file mode 100644 index 0000000..107f334 --- /dev/null +++ b/BookieClient/src/app/features/auth/login.component.html @@ -0,0 +1,48 @@ + diff --git a/BookieClient/src/app/features/auth/login.component.scss b/BookieClient/src/app/features/auth/login.component.scss new file mode 100644 index 0000000..116a576 --- /dev/null +++ b/BookieClient/src/app/features/auth/login.component.scss @@ -0,0 +1,34 @@ +.login-wrap { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, #1565c0, #0d47a1); + padding: 24px; +} + +.login-card { + width: 100%; + max-width: 400px; + overflow: hidden; +} + +.login-title { + display: flex; + align-items: center; + gap: 8px; +} + +.login-error { + color: var(--bookie-loss); + margin: 0 0 12px; + font-size: 0.9rem; +} + +.login-hint { + text-align: center; + margin-top: 16px; + font-size: 0.8rem; +} + +form { margin-top: 8px; } diff --git a/BookieClient/src/app/features/auth/login.component.ts b/BookieClient/src/app/features/auth/login.component.ts new file mode 100644 index 0000000..9a3c045 --- /dev/null +++ b/BookieClient/src/app/features/auth/login.component.ts @@ -0,0 +1,50 @@ +import { Component, inject, signal } from '@angular/core'; +import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; +import { Router } from '@angular/router'; +import { MatCardModule } from '@angular/material/card'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { AuthService } from '../../core/services/auth.service'; + +@Component({ + selector: 'app-login', + imports: [ + ReactiveFormsModule, MatCardModule, MatFormFieldModule, MatInputModule, + MatButtonModule, MatIconModule, MatProgressBarModule, + ], + templateUrl: './login.component.html', + styleUrl: './login.component.scss', +}) +export class LoginComponent { + private fb = inject(FormBuilder); + private auth = inject(AuthService); + private router = inject(Router); + + readonly loading = signal(false); + readonly error = signal(null); + readonly hide = signal(true); + + readonly form = this.fb.nonNullable.group({ + username: ['admin', Validators.required], + password: ['admin123', Validators.required], + }); + + submit() { + if (this.form.invalid) return; + this.loading.set(true); + this.error.set(null); + this.auth.login(this.form.getRawValue()).subscribe({ + next: () => { + this.loading.set(false); + this.router.navigate(['/dashboard']); + }, + error: () => { + this.loading.set(false); + this.error.set('Invalid username or password.'); + }, + }); + } +} diff --git a/BookieClient/src/app/features/crud/crud-config.ts b/BookieClient/src/app/features/crud/crud-config.ts new file mode 100644 index 0000000..5d0d521 --- /dev/null +++ b/BookieClient/src/app/features/crud/crud-config.ts @@ -0,0 +1,252 @@ +export type FieldType = 'text' | 'number' | 'date' | 'datetime' | 'select' | 'textarea'; +export type ColumnType = 'text' | 'date' | 'datetime' | 'boolean' | 'badge'; +export type LookupType = 'leagues' | 'seasons' | 'teams' | 'players' | 'matchdays'; +export type FilterType = 'text' | 'select' | 'date'; +export type EntityLink = 'player' | 'team' | 'match'; +export type RowActionType = 'match-stats' | 'head-to-head'; + +export interface SelectOption { value: string | number; label: string; } + +/** Opens an entity stats/detail dialog when the cell value is clicked. */ +export interface CellLink { + entity: EntityLink; + idKey: string; +} + +/** A per-row icon-button action (available to all users), e.g. view match stats / head-to-head. */ +export interface RowAction { + icon: string; + tooltip: string; + action: RowActionType; + color?: 'primary' | 'accent' | 'warn'; + showWhen?: (row: any) => boolean; +} + +/** A standalone filter control (not necessarily tied to a visible column). */ +export interface FilterConfig { + /** Backend filter key. */ + key: string; + label: string; + type: FilterType | 'lookup'; + /** Options for a static select filter. */ + options?: SelectOption[]; + /** Data source for a dropdown populated from the API. */ + lookup?: LookupType; + /** + * Other filter keys this lookup depends on. Their current values are passed as + * query params when loading options, and selecting a parent resets this filter. + */ + dependsOn?: string[]; +} + +export interface FieldConfig { + key: string; + label: string; + type: FieldType; + required?: boolean; + lookup?: LookupType; + options?: SelectOption[]; + min?: number; + max?: number; + maxLength?: number; + hint?: string; +} + +export interface ColumnConfig { + key: string; + label: string; + type?: ColumnType; + sortKey?: string; + filter?: FilterType; + /** Backend filter key; defaults to `key`. */ + filterKey?: string; + filterOptions?: SelectOption[]; + /** Renders the cell as a clickable link that opens the entity's stats dialog. */ + link?: CellLink; +} + +export interface CrudConfig { + resource: string; + title: string; + singular: string; + idKey: string; + columns: ColumnConfig[]; + fields: FieldConfig[]; + defaultSort?: string; + defaultSortDesc?: boolean; + rowActions?: RowAction[]; + /** Explicit filter controls. When set, these replace column-derived filters. */ + filters?: FilterConfig[]; +} + +const POSITIONS: SelectOption[] = [ + { value: 'GK', label: 'Goalkeeper' }, + { value: 'DF', label: 'Defender' }, + { value: 'MF', label: 'Midfielder' }, + { value: 'FW', label: 'Forward' }, +]; + +const COMPETITION_TYPES: SelectOption[] = [ + { value: 'league', label: 'League' }, + { value: 'cup', label: 'Cup' }, +]; + +const MATCH_STATUSES: SelectOption[] = [ + { value: 'scheduled', label: 'Scheduled' }, + { value: 'live', label: 'Live' }, + { value: 'finished', label: 'Finished' }, + { value: 'cancelled', label: 'Cancelled' }, +]; + +export const CRUD_CONFIGS: Record = { + leagues: { + resource: 'leagues', + title: 'Leagues', + singular: 'League', + idKey: 'leagueId', + defaultSort: 'name', + columns: [ + { key: 'name', label: 'Name', sortKey: 'name', filter: 'text' }, + { key: 'country', label: 'Country', sortKey: 'country', filter: 'text' }, + { key: 'tierLevel', label: 'Tier', sortKey: 'tierLevel' }, + { key: 'competitionType', label: 'Type', type: 'badge', sortKey: 'competitionType', filter: 'select', filterOptions: COMPETITION_TYPES }, + { key: 'seasonCount', label: 'Seasons' }, + { key: 'source', label: 'Source' }, + ], + fields: [ + { key: 'name', label: 'Name', type: 'text', required: true, maxLength: 100 }, + { key: 'country', label: 'Country', type: 'text', required: true, maxLength: 100 }, + { key: 'tierLevel', label: 'Tier level', type: 'number', required: true, min: 1, max: 20 }, + { key: 'competitionType', label: 'Competition type', type: 'select', required: true, options: COMPETITION_TYPES }, + { key: 'source', label: 'Source', type: 'text', maxLength: 200 }, + ], + }, + seasons: { + resource: 'seasons', + title: 'Seasons', + singular: 'Season', + idKey: 'seasonId', + defaultSort: 'startDate', + defaultSortDesc: true, + columns: [ + { key: 'name', label: 'Name', sortKey: 'name', filter: 'text' }, + { key: 'leagueName', label: 'League', sortKey: 'league', filter: 'text', filterKey: 'leagueName' }, + { key: 'country', label: 'Country' }, + { key: 'startDate', label: 'Start', type: 'date', sortKey: 'startDate' }, + { key: 'endDate', label: 'End', type: 'date' }, + ], + fields: [ + { key: 'leagueId', label: 'League', type: 'select', required: true, lookup: 'leagues' }, + { key: 'name', label: 'Name (e.g. 2026/2027)', type: 'text', required: true, maxLength: 20 }, + { key: 'startDate', label: 'Start date', type: 'date', required: true }, + { key: 'endDate', label: 'End date', type: 'date' }, + ], + }, + teams: { + resource: 'teams', + title: 'Teams', + singular: 'Team', + idKey: 'teamId', + defaultSort: 'name', + columns: [ + { key: 'name', label: 'Name', sortKey: 'name', filter: 'text', link: { entity: 'team', idKey: 'teamId' } }, + { key: 'shortName', label: 'Short' }, + { key: 'city', label: 'City', sortKey: 'city', filter: 'text' }, + { key: 'stadium', label: 'Stadium', filter: 'text' }, + { key: 'foundedDate', label: 'Founded', type: 'date' }, + ], + fields: [ + { key: 'name', label: 'Name', type: 'text', required: true, maxLength: 100 }, + { key: 'shortName', label: 'Short name', type: 'text', maxLength: 10 }, + { key: 'city', label: 'City', type: 'text', maxLength: 100 }, + { key: 'stadium', label: 'Stadium', type: 'text', maxLength: 150 }, + { key: 'foundedDate', label: 'Founded date', type: 'date' }, + ], + }, + players: { + resource: 'players', + title: 'Players', + singular: 'Player', + idKey: 'playerId', + defaultSort: 'fullName', + columns: [ + { key: 'fullName', label: 'Full name', sortKey: 'fullName', filter: 'text', link: { entity: 'player', idKey: 'playerId' } }, + { key: 'primaryPosition', label: 'Position', type: 'badge', sortKey: 'position', filter: 'select', filterKey: 'position', filterOptions: POSITIONS }, + { key: 'nationality', label: 'Nationality', sortKey: 'nationality', filter: 'text' }, + { key: 'birthDate', label: 'Born', type: 'date', sortKey: 'birthDate' }, + ], + fields: [ + { key: 'fullName', label: 'Full name', type: 'text', required: true, maxLength: 150 }, + { key: 'primaryPosition', label: 'Primary position', type: 'select', options: POSITIONS }, + { key: 'nationality', label: 'Nationality', type: 'text', maxLength: 100 }, + { key: 'birthDate', label: 'Birth date', type: 'date' }, + ], + }, + matches: { + resource: 'matches', + title: 'Matches', + singular: 'Match', + idKey: 'matchId', + defaultSort: 'kickoffAt', + defaultSortDesc: true, + columns: [ + { key: 'kickoffAt', label: 'Kickoff', type: 'datetime', sortKey: 'kickoffAt' }, + { key: 'homeTeamName', label: 'Home', sortKey: 'homeTeam', link: { entity: 'team', idKey: 'homeTeamId' } }, + { key: 'awayTeamName', label: 'Away', link: { entity: 'team', idKey: 'awayTeamId' } }, + { key: 'leagueName', label: 'League', sortKey: 'league' }, + { key: 'status', label: 'Status', type: 'badge', sortKey: 'status' }, + ], + filters: [ + { key: 'leagueId', label: 'League', type: 'lookup', lookup: 'leagues' }, + { key: 'seasonId', label: 'Season', type: 'lookup', lookup: 'seasons', dependsOn: ['leagueId'] }, + { key: 'teamId', label: 'Team', type: 'lookup', lookup: 'teams', dependsOn: ['leagueId', 'seasonId'] }, + { key: 'status', label: 'Status', type: 'select', options: MATCH_STATUSES }, + { key: 'dateFrom', label: 'From date', type: 'date' }, + { key: 'dateTo', label: 'To date', type: 'date' }, + ], + rowActions: [ + { icon: 'analytics', tooltip: 'Match statistics', action: 'match-stats', color: 'primary', showWhen: (r) => r.status === 'finished' }, + { icon: 'compare_arrows', tooltip: 'Head-to-head', action: 'head-to-head', color: 'accent' }, + ], + fields: [ + { key: 'matchdayId', label: 'Matchday', type: 'select', required: true, lookup: 'matchdays' }, + { key: 'homeTeamId', label: 'Home team', type: 'select', required: true, lookup: 'teams' }, + { key: 'awayTeamId', label: 'Away team', type: 'select', required: true, lookup: 'teams' }, + { key: 'kickoffAt', label: 'Kickoff', type: 'datetime', required: true }, + { key: 'status', label: 'Status', type: 'select', required: true, options: MATCH_STATUSES }, + { key: 'stadium', label: 'Stadium', type: 'text', maxLength: 150 }, + { key: 'referee', label: 'Referee', type: 'text', maxLength: 150 }, + { key: 'homeScoreHt', label: 'Home score (HT)', type: 'number', min: 0 }, + { key: 'awayScoreHt', label: 'Away score (HT)', type: 'number', min: 0 }, + { key: 'homeScoreFt', label: 'Home score (FT)', type: 'number', min: 0 }, + { key: 'awayScoreFt', label: 'Away score (FT)', type: 'number', min: 0 }, + { key: 'dataSource', label: 'Data source', type: 'text', maxLength: 200 }, + ], + }, + contracts: { + resource: 'player-contracts', + title: 'Player Contracts', + singular: 'Contract', + idKey: 'contractId', + defaultSort: 'startDate', + defaultSortDesc: true, + columns: [ + { key: 'playerName', label: 'Player', sortKey: 'player', filter: 'text', filterKey: 'playerName', link: { entity: 'player', idKey: 'playerId' } }, + { key: 'teamName', label: 'Team', sortKey: 'team', filter: 'text', filterKey: 'teamName', link: { entity: 'team', idKey: 'teamId' } }, + { key: 'shirtNumber', label: 'Shirt #' }, + { key: 'startDate', label: 'Start', type: 'date', sortKey: 'startDate' }, + { key: 'endDate', label: 'End', type: 'date' }, + { + key: 'isCurrent', label: 'Current', type: 'boolean', filter: 'select', filterKey: 'current', + filterOptions: [{ value: 'true', label: 'Current' }, { value: 'false', label: 'Ended' }], + }, + ], + fields: [ + { key: 'playerId', label: 'Player', type: 'select', required: true, lookup: 'players' }, + { key: 'teamId', label: 'Team', type: 'select', required: true, lookup: 'teams' }, + { key: 'shirtNumber', label: 'Shirt number', type: 'number', min: 1, max: 99 }, + { key: 'startDate', label: 'Start date', type: 'date', required: true }, + { key: 'endDate', label: 'End date (blank = current)', type: 'date' }, + ], + }, +}; diff --git a/BookieClient/src/app/features/crud/crud-form-dialog.component.html b/BookieClient/src/app/features/crud/crud-form-dialog.component.html new file mode 100644 index 0000000..8658868 --- /dev/null +++ b/BookieClient/src/app/features/crud/crud-form-dialog.component.html @@ -0,0 +1,62 @@ +

{{ isEdit ? 'Edit' : 'New' }} {{ data.config.singular }}

+ + +
+ @for (f of data.config.fields; track f.key) { + @switch (f.type) { + @case ('select') { + + {{ f.label }} + + + @for (opt of optionsFor(f.key); track opt.value) { + {{ opt.label }} + } + + + } + @case ('date') { + + {{ f.label }} + + + + + } + @case ('datetime') { + + {{ f.label }} + + + } + @case ('number') { + + {{ f.label }} + + @if (f.hint) { {{ f.hint }} } + + } + @case ('textarea') { + + {{ f.label }} + + + } + @default { + + {{ f.label }} + + @if (f.hint) { {{ f.hint }} } + + } + } + } +
+
+ + + + + diff --git a/BookieClient/src/app/features/crud/crud-form-dialog.component.scss b/BookieClient/src/app/features/crud/crud-form-dialog.component.scss new file mode 100644 index 0000000..03ecf14 --- /dev/null +++ b/BookieClient/src/app/features/crud/crud-form-dialog.component.scss @@ -0,0 +1,10 @@ +.dialog-form { + display: flex; + flex-direction: column; + min-width: 360px; + padding-top: 8px; +} + +@media (max-width: 480px) { + .dialog-form { min-width: unset; } +} diff --git a/BookieClient/src/app/features/crud/crud-form-dialog.component.ts b/BookieClient/src/app/features/crud/crud-form-dialog.component.ts new file mode 100644 index 0000000..83168e4 --- /dev/null +++ b/BookieClient/src/app/features/crud/crud-form-dialog.component.ts @@ -0,0 +1,94 @@ +import { Component, inject, signal } from '@angular/core'; +import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; +import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; +import { MatSelectModule } from '@angular/material/select'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { ApiService } from '../../core/services/api.service'; +import { CrudConfig, FieldConfig, SelectOption } from './crud-config'; + +interface DialogData { config: CrudConfig; entity: Record | null; } + +@Component({ + selector: 'app-crud-form-dialog', + imports: [ + ReactiveFormsModule, MatDialogModule, MatFormFieldModule, MatInputModule, MatSelectModule, + MatDatepickerModule, MatButtonModule, MatIconModule, + ], + templateUrl: './crud-form-dialog.component.html', + styleUrl: './crud-form-dialog.component.scss', +}) +export class CrudFormDialogComponent { + private fb = inject(FormBuilder); + private api = inject(ApiService); + readonly data = inject(MAT_DIALOG_DATA); + private ref = inject(MatDialogRef); + + readonly isEdit = !!this.data.entity; + readonly form: FormGroup; + readonly options = signal>({}); + + constructor() { + const group: Record = {}; + for (const f of this.data.config.fields) { + const validators = []; + if (f.required) validators.push(Validators.required); + if (f.min != null) validators.push(Validators.min(f.min)); + if (f.max != null) validators.push(Validators.max(f.max)); + if (f.maxLength != null) validators.push(Validators.maxLength(f.maxLength)); + group[f.key] = [this.initialValue(f), validators]; + } + this.form = this.fb.group(group); + + // Load lookup-backed select options. + for (const f of this.data.config.fields) { + if (f.options) { + this.options.update((o) => ({ ...o, [f.key]: f.options! })); + } else if (f.lookup) { + this.api.lookup(f.lookup).subscribe((items) => { + this.options.update((o) => ({ ...o, [f.key]: items.map((i) => ({ value: i.id, label: i.name })) })); + }); + } + } + } + + private initialValue(f: FieldConfig): any { + const raw = this.data.entity?.[f.key]; + if (raw == null || raw === '') return f.type === 'select' ? null : null; + if (f.type === 'date') return new Date(raw); + if (f.type === 'datetime') return this.toLocalInput(new Date(raw)); + return raw; + } + + private toLocalInput(d: Date): string { + const p = (n: number) => String(n).padStart(2, '0'); + return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}T${p(d.getHours())}:${p(d.getMinutes())}`; + } + + private toDateOnly(d: Date): string { + const p = (n: number) => String(n).padStart(2, '0'); + return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`; + } + + optionsFor(key: string): SelectOption[] { + return this.options()[key] ?? []; + } + + save() { + if (this.form.invalid) { this.form.markAllAsTouched(); return; } + const payload: Record = {}; + for (const f of this.data.config.fields) { + let v = this.form.value[f.key]; + if (v === '' || v === undefined) v = null; + if (v != null && f.type === 'date' && v instanceof Date) v = this.toDateOnly(v); + if (v != null && f.type === 'number') v = Number(v); + payload[f.key] = v; + } + this.ref.close(payload); + } + + cancel() { this.ref.close(null); } +} diff --git a/BookieClient/src/app/features/crud/crud-page.component.html b/BookieClient/src/app/features/crud/crud-page.component.html new file mode 100644 index 0000000..a5492ea --- /dev/null +++ b/BookieClient/src/app/features/crud/crud-page.component.html @@ -0,0 +1,120 @@ +
+ + + +
+ + Search + search + + + + {{ total() }} record(s) +
+ + @if (filterDefs().length) { +
+ @for (def of filterDefs(); track def.key) { + @if (def.type === 'text') { + + {{ def.label }} + + + } @else if (def.type === 'date') { + + {{ def.label }} + + + + + } @else { + + {{ def.label }} + + All + @for (opt of optionsFor(def); track opt.value) { + {{ opt.label }} + } + + + } + } + @if (hasActiveFilters()) { + + } +
+ } + + @if (loading()) { } + +
+ + @for (col of config()?.columns ?? []; track col.key) { + + + + + } + + + + + + + + +
+ {{ col.label }} + + @if (col.link && row[col.key] != null) { + + } @else { + @switch (col.type) { + @case ('date') { {{ row[col.key] ? (row[col.key] | date: 'mediumDate') : '—' }} } + @case ('datetime') { {{ row[col.key] ? (row[col.key] | date: 'medium') : '—' }} } + @case ('boolean') { + + {{ row[col.key] ? 'check_circle' : 'remove' }} + + } + @case ('badge') { + @if (row[col.key]) { {{ row[col.key] }} } + @else { } + } + @default { {{ row[col.key] ?? '—' }} } + } + } + View + @for (action of visibleActions(row); track action.action) { + + } +
+ + @if (!loading() && rows().length === 0) { +
+ inbox No records found. +
+ } +
+ + + +
+
diff --git a/BookieClient/src/app/features/crud/crud-page.component.scss b/BookieClient/src/app/features/crud/crud-page.component.scss new file mode 100644 index 0000000..1c52082 --- /dev/null +++ b/BookieClient/src/app/features/crud/crud-page.component.scss @@ -0,0 +1,50 @@ +.search-field { width: 320px; max-width: 100%; } + +.filter-row { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 10px; + padding: 4px 0 8px; +} + +.filter-field { width: 180px; max-width: 100%; } + +.link-cell { + background: none; + border: none; + padding: 0; + font: inherit; + color: #1565c0; + cursor: pointer; + text-align: left; +} +.link-cell:hover { text-decoration: underline; } + +.table-wrap { overflow-x: auto; } + +.cell-badge { + display: inline-block; + padding: 2px 10px; + border-radius: 12px; + background: #e3f2fd; + color: #1565c0; + font-size: 0.78rem; + font-weight: 600; + text-transform: capitalize; +} + +.bool-icon { color: rgba(0,0,0,0.3); } +.bool-icon.yes { color: var(--bookie-win); } + +.empty-row { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 40px; +} + +.actions-cell { text-align: right; white-space: nowrap; } + +table { min-width: 600px; } diff --git a/BookieClient/src/app/features/crud/crud-page.component.ts b/BookieClient/src/app/features/crud/crud-page.component.ts new file mode 100644 index 0000000..bde0dbf --- /dev/null +++ b/BookieClient/src/app/features/crud/crud-page.component.ts @@ -0,0 +1,255 @@ +import { Component, computed, inject, signal } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { DatePipe } from '@angular/common'; +import { Subject, debounceTime, distinctUntilChanged } from 'rxjs'; +import { MatCardModule } from '@angular/material/card'; +import { MatTableModule } from '@angular/material/table'; +import { MatPaginatorModule, PageEvent } from '@angular/material/paginator'; +import { MatSortModule, Sort } from '@angular/material/sort'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; +import { MatSelectModule } from '@angular/material/select'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatChipsModule } from '@angular/material/chips'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { MatDialog } from '@angular/material/dialog'; +import { ApiService } from '../../core/services/api.service'; +import { CrudConfig, ColumnConfig, FilterConfig, RowAction, SelectOption } from './crud-config'; +import { MatchDetailsDialogComponent } from '../pre-match/match-details-dialog.component'; +import { HeadToHeadDialogComponent } from '../pre-match/head-to-head-dialog.component'; +import { PlayerStatsDialogComponent } from '../stats/player-stats-dialog.component'; +import { TeamStatsDialogComponent } from '../stats/team-stats-dialog.component'; + +@Component({ + selector: 'app-crud-page', + imports: [ + DatePipe, MatCardModule, MatTableModule, MatPaginatorModule, MatSortModule, MatFormFieldModule, + MatInputModule, MatSelectModule, MatDatepickerModule, MatButtonModule, MatIconModule, + MatProgressBarModule, MatChipsModule, MatTooltipModule, + ], + templateUrl: './crud-page.component.html', + styleUrl: './crud-page.component.scss', +}) +export class CrudPageComponent { + private route = inject(ActivatedRoute); + private api = inject(ApiService); + private dialog = inject(MatDialog); + + readonly config = signal(null); + readonly rows = signal([]); + readonly total = signal(0); + readonly loading = signal(false); + + readonly page = signal(0); + readonly pageSize = signal(10); + readonly sortBy = signal(undefined); + readonly sortDesc = signal(false); + private search = ''; + + readonly filters = signal>({}); + readonly lookupOptions = signal>({}); + + readonly displayedColumns = signal([]); + + /** Unified filter definitions: explicit config.filters, else derived from filterable columns. */ + readonly filterDefs = computed(() => { + const cfg = this.config(); + if (!cfg) return []; + if (cfg.filters?.length) return cfg.filters; + return cfg.columns + .filter((c) => !!c.filter) + .map((c) => ({ + key: c.filterKey ?? c.key, + label: c.label, + type: c.filter!, + options: c.filterOptions, + })); + }); + + readonly hasActiveFilters = computed(() => Object.keys(this.filters()).length > 0); + + private searchInput$ = new Subject(); + private filterChange$ = new Subject(); + + constructor() { + this.searchInput$.pipe(debounceTime(300), distinctUntilChanged()).subscribe((term) => { + this.search = term; + this.page.set(0); + this.load(); + }); + + this.filterChange$.pipe(debounceTime(300)).subscribe(() => { + this.page.set(0); + this.load(); + }); + + this.route.data.subscribe((data) => { + const cfg = data['config'] as CrudConfig; + this.config.set(cfg); + this.search = ''; + this.filters.set({}); + this.page.set(0); + this.sortBy.set(cfg.defaultSort); + this.sortDesc.set(cfg.defaultSortDesc ?? false); + this.updateColumns(); + this.loadLookups(); + this.load(); + }); + } + + private loadLookups() { + this.lookupOptions.set({}); + this.filterDefs() + .filter((f) => f.type === 'lookup' && f.lookup) + .forEach((f) => this.loadLookup(f)); + } + + /** Loads options for one lookup filter, scoped by the current values of its dependencies. */ + private loadLookup(def: FilterConfig) { + if (def.type !== 'lookup' || !def.lookup) return; + const params: Record = {}; + for (const dep of def.dependsOn ?? []) { + const v = this.filters()[dep]; + if (v) params[dep] = v; + } + this.api.lookup(def.lookup, params).subscribe((items) => { + this.lookupOptions.update((cur) => ({ + ...cur, + [def.lookup!]: items.map((i) => ({ value: String(i.id), label: i.name })), + })); + }); + } + + optionsFor(def: FilterConfig): SelectOption[] { + if (def.type === 'lookup' && def.lookup) return this.lookupOptions()[def.lookup] ?? []; + return def.options ?? []; + } + + private updateColumns() { + const cfg = this.config(); + if (!cfg) return; + const cols = cfg.columns.map((c) => c.key); + if (cfg.rowActions?.length) cols.push('view'); + this.displayedColumns.set(cols); + } + + load() { + const cfg = this.config(); + if (!cfg) return; + this.loading.set(true); + this.api.crud(cfg.resource).getPaged({ + page: this.page() + 1, + pageSize: this.pageSize(), + search: this.search || undefined, + sortBy: this.sortBy(), + sortDesc: this.sortDesc(), + filters: this.filters(), + }).subscribe({ + next: (res) => { + this.rows.set(res.items); + this.total.set(res.totalCount); + this.loading.set(false); + }, + error: () => this.loading.set(false), + }); + } + + onSearch(value: string) { this.searchInput$.next(value); } + + setFilter(def: FilterConfig, value: string | number) { + const next = { ...this.filters() }; + if (value == null || value === '') delete next[def.key]; + else next[def.key] = String(value); + + // Reset any filters that depend on this one (their previous choice may now be invalid). + const dependents = this.filterDefs().filter((f) => f.dependsOn?.includes(def.key)); + for (const dep of dependents) delete next[dep.key]; + + this.filters.set(next); + + // Reload dependent lookups with the new scope. + for (const dep of dependents) this.loadLookup(dep); + + this.filterChange$.next(); + } + + filterValue(def: FilterConfig): string { + return this.filters()[def.key] ?? ''; + } + + /** For date filters: current value as a Date (for the datepicker) or null. */ + dateValue(def: FilterConfig): Date | null { + const v = this.filters()[def.key]; + return v ? new Date(v) : null; + } + + /** Stores a picked date as YYYY-MM-DD (local), avoiding timezone shifts. */ + setDateFilter(def: FilterConfig, value: Date | null) { + if (!value) { this.setFilter(def, ''); return; } + const y = value.getFullYear(); + const m = String(value.getMonth() + 1).padStart(2, '0'); + const d = String(value.getDate()).padStart(2, '0'); + this.setFilter(def, `${y}-${m}-${d}`); + } + + clearFilters() { + this.filters.set({}); + this.page.set(0); + this.loadLookups(); + this.load(); + } + + onPage(e: PageEvent) { + this.page.set(e.pageIndex); + this.pageSize.set(e.pageSize); + this.load(); + } + + onSort(e: Sort) { + this.sortBy.set(e.direction ? e.active : this.config()?.defaultSort); + this.sortDesc.set(e.direction === 'desc'); + this.load(); + } + + // ---- Clickable cells + row actions ---- + + visibleActions(row: any): RowAction[] { + return (this.config()?.rowActions ?? []).filter((a) => !a.showWhen || a.showWhen(row)); + } + + openLink(col: ColumnConfig, row: any) { + if (!col.link) return; + const id = row[col.link.idKey]; + if (id == null) return; + if (col.link.entity === 'player') { + this.dialog.open(PlayerStatsDialogComponent, { data: { playerId: id }, width: '600px', maxWidth: '95vw', autoFocus: false }); + } else if (col.link.entity === 'team') { + this.dialog.open(TeamStatsDialogComponent, { data: { teamId: id }, width: '640px', maxWidth: '95vw', autoFocus: false }); + } else if (col.link.entity === 'match') { + this.dialog.open(MatchDetailsDialogComponent, { data: { matchId: id }, width: '640px', maxWidth: '95vw', autoFocus: false }); + } + } + + runAction(action: RowAction, row: any) { + if (action.action === 'match-stats') { + this.dialog.open(MatchDetailsDialogComponent, { + data: { matchId: row.matchId }, width: '640px', maxWidth: '95vw', autoFocus: false, + }); + } else if (action.action === 'head-to-head') { + this.dialog.open(HeadToHeadDialogComponent, { + data: { + teamAId: row.homeTeamId, + teamBId: row.awayTeamId, + teamAName: row.homeTeamName, + teamBName: row.awayTeamName, + beforeMatchId: row.matchId, + }, + width: '560px', maxWidth: '95vw', autoFocus: false, + }); + } + } + +} diff --git a/BookieClient/src/app/features/dashboard/dashboard.component.html b/BookieClient/src/app/features/dashboard/dashboard.component.html new file mode 100644 index 0000000..d08d5b0 --- /dev/null +++ b/BookieClient/src/app/features/dashboard/dashboard.component.html @@ -0,0 +1,56 @@ +
+ + + @if (loading()) { +
+ } @else { +
+ @for (w of widgets; track w.label) { + +
+ {{ w.icon }} +
+
+
{{ w.value() }}
+
{{ w.label }}
+
+
+ } +
+ +
+ + Matches by status + +
+
+
+ + + + Next fixtures + Pre-match reports + + + @if (nextMatches().length) { + + @for (m of nextMatches(); track m.matchId) { + + sports_soccer +
{{ m.homeTeamName }} vs {{ m.awayTeamName }}
+
+ {{ m.leagueName }} ({{ m.country }}) · {{ m.kickoffAt | date: 'EEE d MMM, HH:mm' }} +
+
+ } +
+ } @else { +

No upcoming scheduled fixtures.

+ } +
+
+
+ } +
diff --git a/BookieClient/src/app/features/dashboard/dashboard.component.scss b/BookieClient/src/app/features/dashboard/dashboard.component.scss new file mode 100644 index 0000000..620c7cf --- /dev/null +++ b/BookieClient/src/app/features/dashboard/dashboard.component.scss @@ -0,0 +1,47 @@ +.center-spinner { display: flex; justify-content: center; padding: 64px; } + +.widgets { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 16px; + margin-bottom: 24px; +} + +.widget { + display: flex; + align-items: center; + gap: 16px; + padding: 16px; + cursor: pointer; + transition: transform 0.15s, box-shadow 0.15s; +} +.widget:hover { transform: translateY(-2px); box-shadow: 0 6px 18px rgba(0,0,0,0.12); } + +.widget-icon { + width: 52px; + height: 52px; + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + color: #fff; +} +.widget-icon mat-icon { font-size: 28px; width: 28px; height: 28px; } + +.widget-value { font-size: 1.8rem; font-weight: 700; line-height: 1; } +.widget-label { font-size: 0.85rem; margin-top: 4px; } + +.dash-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; +} +@media (max-width: 900px) { .dash-grid { grid-template-columns: 1fr; } } + +.chart-wrap { height: 280px; position: relative; } + +.next-card mat-card-header { + display: flex; + justify-content: space-between; + align-items: center; +} diff --git a/BookieClient/src/app/features/dashboard/dashboard.component.ts b/BookieClient/src/app/features/dashboard/dashboard.component.ts new file mode 100644 index 0000000..912482f --- /dev/null +++ b/BookieClient/src/app/features/dashboard/dashboard.component.ts @@ -0,0 +1,88 @@ +import { AfterViewInit, Component, ElementRef, computed, effect, inject, signal, viewChild } from '@angular/core'; +import { DatePipe } from '@angular/common'; +import { RouterLink } from '@angular/router'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatButtonModule } from '@angular/material/button'; +import { MatListModule } from '@angular/material/list'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { Chart, registerables } from 'chart.js'; +import { ApiService } from '../../core/services/api.service'; +import { DashboardSummary } from '../../core/models/models'; + +Chart.register(...registerables); + +interface Widget { label: string; icon: string; value: () => number; color: string; link?: string; } + +@Component({ + selector: 'app-dashboard', + imports: [ + DatePipe, RouterLink, + MatCardModule, MatIconModule, MatButtonModule, MatListModule, MatProgressSpinnerModule, + ], + templateUrl: './dashboard.component.html', + styleUrl: './dashboard.component.scss', +}) +export class DashboardComponent implements AfterViewInit { + private api = inject(ApiService); + + readonly loading = signal(true); + readonly summary = signal(null); + private chartCanvas = viewChild>('statusChart'); + private chart?: Chart; + + readonly widgets: Widget[] = [ + { label: 'Leagues', icon: 'emoji_events', value: () => this.summary()?.leagueCount ?? 0, color: '#1565c0', link: '/leagues' }, + { label: 'Seasons', icon: 'calendar_month', value: () => this.summary()?.seasonCount ?? 0, color: '#00838f', link: '/seasons' }, + { label: 'Teams', icon: 'groups', value: () => this.summary()?.teamCount ?? 0, color: '#2e7d32', link: '/teams' }, + { label: 'Players', icon: 'person', value: () => this.summary()?.playerCount ?? 0, color: '#6a1b9a', link: '/players' }, + { label: 'Matches', icon: 'sports_soccer', value: () => this.summary()?.matchCount ?? 0, color: '#ef6c00', link: '/matches' }, + { label: 'Upcoming (7 days)', icon: 'upcoming', value: () => this.summary()?.upcomingMatchesThisWeek ?? 0, color: '#c62828', link: '/pre-match' }, + ]; + + readonly nextMatches = computed(() => this.summary()?.nextMatches ?? []); + + constructor() { + effect(() => { + const s = this.summary(); + if (s && this.chartCanvas()) this.renderChart(s); + }); + } + + ngAfterViewInit() { + this.api.getDashboard().subscribe({ + next: (s) => { this.summary.set(s); this.loading.set(false); }, + error: () => this.loading.set(false), + }); + } + + private renderChart(s: DashboardSummary) { + const canvas = this.chartCanvas()?.nativeElement; + if (!canvas) return; + this.chart?.destroy(); + + const colors: Record = { + scheduled: '#1976d2', live: '#e53935', finished: '#2e7d32', cancelled: '#757575', + }; + const data = s.statusBreakdown; + + this.chart = new Chart(canvas, { + type: 'doughnut', + data: { + labels: data.map((d) => d.status), + datasets: [{ + data: data.map((d) => d.count), + backgroundColor: data.map((d) => colors[d.status] ?? '#90a4ae'), + borderWidth: 2, + borderColor: '#fff', + }], + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { legend: { position: 'bottom' } }, + cutout: '62%', + }, + }); + } +} diff --git a/BookieClient/src/app/features/pre-match/head-to-head-dialog.component.html b/BookieClient/src/app/features/pre-match/head-to-head-dialog.component.html new file mode 100644 index 0000000..597a012 --- /dev/null +++ b/BookieClient/src/app/features/pre-match/head-to-head-dialog.component.html @@ -0,0 +1,73 @@ +
+
+ history + Head-to-head + · {{ data.teamAName }} vs {{ data.teamBName }} +
+ +
+ + + @if (loading()) { +
+ } @else if (errored()) { +

Could not load head-to-head data.

+ } @else { + @let d = h2h()!; + @if (!d.hasData) { +
+ search_off +

No previous meetings between these teams.

+
+ } @else { +
+
+
+ {{ d.teamAWins }} + {{ d.teamAName }} wins +
+
+ {{ d.draws }} + Draws +
+
+ {{ d.teamBWins }} + {{ d.teamBName }} wins +
+
+
+
+
+
+
+
+ {{ d.totalMeetings }} meeting(s) · goals {{ d.teamAGoals }}–{{ d.teamBGoals }} +
+
+ +

Previous meetings

+
    + @for (m of d.meetings; track m.matchId) { +
  • + +
  • + } +
+ } + } +
+ + + + diff --git a/BookieClient/src/app/features/pre-match/head-to-head-dialog.component.scss b/BookieClient/src/app/features/pre-match/head-to-head-dialog.component.scss new file mode 100644 index 0000000..098364c --- /dev/null +++ b/BookieClient/src/app/features/pre-match/head-to-head-dialog.component.scss @@ -0,0 +1,67 @@ +.dlg-loading { display: flex; justify-content: center; padding: 48px; min-width: 420px; } + +.dlg-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + padding: 16px 16px 0; +} +.comp { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; } +.comp mat-icon { font-size: 20px; width: 20px; height: 20px; color: #1565c0; } +.close-btn { margin: -8px -8px 0 0; } + +.empty { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 32px; } +.empty mat-icon { font-size: 40px; width: 40px; height: 40px; color: rgba(0,0,0,0.3); } + +.summary { margin: 8px 0 4px; } +.counts { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; text-align: center; } +.count { display: flex; flex-direction: column; } +.count b { font-size: 1.5rem; font-weight: 700; } +.count span { font-size: 0.75rem; } + +.wdl-bar { + display: flex; height: 10px; border-radius: 5px; overflow: hidden; + background: #eceff3; margin: 10px 0 6px; +} +.wdl-bar .seg.a { background: #1565c0; } +.wdl-bar .seg.draw { background: #9e9e9e; } +.wdl-bar .seg.b { background: #ef6c00; } + +.totals { text-align: center; font-size: 0.8rem; } + +.section-title { + font-size: 0.95rem; font-weight: 600; margin: 18px 0 8px; + padding-bottom: 4px; border-bottom: 1px solid rgba(0,0,0,0.08); +} + +.meeting-list { list-style: none; margin: 0; padding: 0; } +.meeting-list li { margin-bottom: 6px; } +.meeting { + display: grid; + grid-template-columns: 84px 1fr; + grid-template-areas: "date teams" "date comp"; + gap: 2px 12px; + width: 100%; + text-align: left; + border: 1px solid rgba(0,0,0,0.08); + background: #f6f8fa; + border-radius: 8px; + padding: 8px 12px; + cursor: pointer; + transition: background 0.15s, border-color 0.15s; +} +.meeting:hover { background: #e3f2fd; border-color: #90caf9; } +.meeting .date { grid-area: date; align-self: center; color: rgba(0,0,0,0.6); font-size: 0.82rem; } +.meeting .teams { + grid-area: teams; + display: grid; + grid-template-columns: 1fr auto 1fr; + align-items: center; + gap: 8px; + font-size: 0.9rem; +} +.meeting .teams .t:first-child { text-align: right; } +.meeting .teams .t:last-child { text-align: left; } +.meeting .teams .t.win { font-weight: 700; } +.meeting .teams .sc { font-weight: 700; } +.meeting .comp-name { grid-area: comp; font-size: 0.72rem; } diff --git a/BookieClient/src/app/features/pre-match/head-to-head-dialog.component.ts b/BookieClient/src/app/features/pre-match/head-to-head-dialog.component.ts new file mode 100644 index 0000000..12b88d1 --- /dev/null +++ b/BookieClient/src/app/features/pre-match/head-to-head-dialog.component.ts @@ -0,0 +1,68 @@ +import { Component, computed, inject, signal } from '@angular/core'; +import { DatePipe } from '@angular/common'; +import { MAT_DIALOG_DATA, MatDialog, MatDialogModule } from '@angular/material/dialog'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { ApiService } from '../../core/services/api.service'; +import { HeadToHead } from '../../core/models/models'; +import { MatchDetailsDialogComponent } from './match-details-dialog.component'; + +interface DialogData { + teamAId: number; + teamBId: number; + teamAName: string; + teamBName: string; + beforeMatchId?: number; +} + +@Component({ + selector: 'app-head-to-head-dialog', + imports: [ + DatePipe, MatDialogModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule, MatTooltipModule, + ], + templateUrl: './head-to-head-dialog.component.html', + styleUrl: './head-to-head-dialog.component.scss', +}) +export class HeadToHeadDialogComponent { + private api = inject(ApiService); + private dialog = inject(MatDialog); + readonly data = inject(MAT_DIALOG_DATA); + + readonly loading = signal(true); + readonly errored = signal(false); + readonly h2h = signal(null); + + /** Percentage widths for the win/draw/win bar. */ + readonly bar = computed(() => { + const d = this.h2h(); + if (!d || d.totalMeetings === 0) return { a: 0, draw: 0, b: 0 }; + const total = d.totalMeetings; + return { + a: Math.round((d.teamAWins / total) * 100), + draw: Math.round((d.draws / total) * 100), + b: Math.round((d.teamBWins / total) * 100), + }; + }); + + constructor() { + this.api.getHeadToHead(this.data.teamAId, this.data.teamBId, this.data.beforeMatchId).subscribe({ + next: (d) => { this.h2h.set(d); this.loading.set(false); }, + error: () => { this.errored.set(true); this.loading.set(false); }, + }); + } + + score(m: { homeScoreFt?: number | null; awayScoreFt?: number | null }): string { + return m.homeScoreFt == null || m.awayScoreFt == null ? '—' : `${m.homeScoreFt} : ${m.awayScoreFt}`; + } + + openMatch(matchId: number) { + this.dialog.open(MatchDetailsDialogComponent, { + data: { matchId }, + width: '640px', + maxWidth: '95vw', + autoFocus: false, + }); + } +} diff --git a/BookieClient/src/app/features/pre-match/match-details-dialog.component.html b/BookieClient/src/app/features/pre-match/match-details-dialog.component.html new file mode 100644 index 0000000..c73cce9 --- /dev/null +++ b/BookieClient/src/app/features/pre-match/match-details-dialog.component.html @@ -0,0 +1,188 @@ +@if (loading()) { +
+} @else if (errored() || !details()) { +

Match details

+ +

Could not load match statistics.

+
+ + + +} @else { + @let d = details()!; +
+
+ {{ d.leagueName }} ({{ d.country }}) · {{ d.seasonName }} · Round {{ d.matchdayNumber }} +
+ +
+ + +
+
{{ d.homeTeamName }}
+
+ @if (d.hasScore) { + {{ d.homeScoreFt }} : {{ d.awayScoreFt }} + @if (d.homeScoreHt != null) { + HT {{ d.homeScoreHt }}:{{ d.awayScoreHt }} + } + } @else { + {{ d.status }} + } +
+
{{ d.awayTeamName }}
+
+ +
+ event{{ d.kickoffAt | date: 'EEE d MMM y, HH:mm' }} + @if (d.stadium) { stadium{{ d.stadium }} } + @if (d.referee) { sports{{ d.referee }} } +
+ + + @if (showComparison()) { +

+ Predictions{{ hasActual() ? ' vs actual' : '' }} +

+
+ @if (anyPrediction(); as p) { + LLM · trained {{ p.modelTrainedAt | date: 'mediumDate' }}@if (p.halfLifeDays != null) {, half-life {{ p.halfLifeDays }}d} + } + @if (anyOpenAi(); as o) { + OpenAI {{ o.model }}@if (o.confidence) { · {{ o.confidence }} confidence} + } + @if (hasActual()) { Actual } +
+ +
+
+
{{ d.homeTeamName }}
+
+
+
+
{{ d.awayTeamName }}
+
+
+
+ + + + + + + + + + + @if (hasLlm()) { } + @if (hasOpenAi()) { } + @if (hasActual()) { } + @if (hasLlm() && hasActual()) { } + @if (hasLlm()) { } + @if (hasOpenAi()) { } + @if (hasActual()) { } + @if (hasLlm() && hasActual()) { } + + + + @for (r of predRows(); track r.label) { + + + @if (hasLlm()) { } + @if (hasOpenAi()) { } + @if (hasActual()) { } + @if (hasLlm() && hasActual()) { + + } + @if (hasLlm()) { } + @if (hasOpenAi()) { } + @if (hasActual()) { } + @if (hasLlm() && hasActual()) { + + } + + } + +
{{ d.homeTeamName }}{{ d.awayTeamName }}
MetricLLMOpenAIActualΔLLMOpenAIActualΔ
{{ r.label }}{{ fmt(r.homeLlm) }}{{ fmt(r.homeOpenAi) }}{{ fmt(r.homeActual) }}{{ delta(r.homeActual, r.homeLlm) }}{{ fmt(r.awayLlm) }}{{ fmt(r.awayOpenAi) }}{{ fmt(r.awayActual) }}{{ delta(r.awayActual, r.awayLlm) }}
+ } @else if (d.hasScore) { +

No stored model prediction for this match.

+ } + + +

Team statistics

+ @if (hasStats()) { +
+ @for (row of statRows(); track row.label) { +
+ {{ row.home }} + {{ row.label }} + {{ row.away }} +
+
+
+
+
+ } +
+ } @else { +

No per-team statistics recorded for this match.

+ } + + +

Goals

+ @if (d.goals.length) { +
    + @for (g of d.goals; track $index) { +
  • + {{ minuteLabel(g.minute, g.addedTime) }} + sports_soccer + + {{ g.scorerName }} + @if (g.assistName) { (assist {{ g.assistName }}) } + @if (g.goalType !== 'open_play') { {{ g.goalType }} } + +
  • + } +
+ } @else {

No goals recorded.

} + + + @if (d.cards.length) { +

Cards

+
    + @for (c of d.cards; track $index) { +
  • + {{ c.minute }}' + + {{ c.playerName }} + @if (c.reason) { — {{ c.reason }} } + +
  • + } +
+ } + + + @if (d.penalties.length) { +

Penalties

+
    + @for (p of d.penalties; track $index) { +
  • + {{ p.minute != null ? p.minute + "'" : '—' }} + adjust + + {{ p.playerName ?? 'Unknown' }} + {{ p.result }} + +
  • + } +
+ } +
+ + + + +} diff --git a/BookieClient/src/app/features/pre-match/match-details-dialog.component.scss b/BookieClient/src/app/features/pre-match/match-details-dialog.component.scss new file mode 100644 index 0000000..faf6d49 --- /dev/null +++ b/BookieClient/src/app/features/pre-match/match-details-dialog.component.scss @@ -0,0 +1,123 @@ +.dlg-loading { display: flex; justify-content: center; padding: 48px; min-width: 420px; } + +.pred-meta { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 6px; + font-size: 0.8rem; + margin-bottom: 10px; +} +.pred-meta mat-icon { font-size: 16px; width: 16px; height: 16px; vertical-align: middle; margin-right: 2px; } +.pred-meta .key { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: 5px; vertical-align: middle; } +.pred-meta .key.llm { background: #7e57c2; } +.pred-meta .key.openai { background: #ef6c00; } +.pred-meta .key.actual { background: #26a69a; } + +.pred-charts { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + margin-bottom: 12px; +} +.pred-chart .pred-team { font-weight: 600; text-align: center; font-size: 0.85rem; margin-bottom: 4px; } +.pred-chart .chart-box { position: relative; height: 180px; } + +@media (max-width: 560px) { + .pred-charts { grid-template-columns: 1fr; } +} + +.pred-table { + width: 100%; + border-collapse: collapse; + font-size: 0.82rem; +} +.pred-table th, .pred-table td { padding: 4px 6px; text-align: center; } +.pred-table thead .grp { border-bottom: 2px solid #eee; font-size: 0.78rem; } +.pred-table thead .sub th { color: rgba(0,0,0,0.55); font-weight: 500; } +.pred-table td.metric { text-align: left; font-weight: 500; } +.pred-table td.actual { color: #00695c; } +.pred-table td.openai { color: #e65100; } +.pred-table td.delta { font-size: 0.78rem; } +.pred-table td.delta-ok { color: #2e7d32; } +.pred-table td.delta-warn { color: #f57c00; } +.pred-table td.delta-bad { color: #c62828; } +.pred-missing { margin: 8px 0 4px; font-size: 0.85rem; font-style: italic; } +.pred-table tbody tr:nth-child(odd) { background: #fafafa; } + +.dlg-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + padding: 16px 16px 0; +} +.comp { font-size: 0.82rem; } +.close-btn { margin: -8px -8px 0 0; } + +.scoreline { + display: grid; + grid-template-columns: 1fr auto 1fr; + align-items: center; + gap: 12px; + margin: 4px 0 12px; +} +.scoreline .team { font-size: 1.05rem; font-weight: 600; } +.scoreline .home { text-align: right; } +.scoreline .away { text-align: left; } +.score { display: flex; flex-direction: column; align-items: center; } +.ft { font-size: 1.5rem; font-weight: 700; } +.ht { font-size: 0.72rem; } +.status-chip { + padding: 3px 10px; border-radius: 12px; background: #1976d2; color: #fff; + font-size: 0.72rem; text-transform: uppercase; font-weight: 600; +} + +.meta { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; font-size: 0.82rem; margin-bottom: 8px; } +.meta span { display: inline-flex; align-items: center; gap: 4px; } +.meta mat-icon { font-size: 17px; width: 17px; height: 17px; } + +.section-title { + font-size: 0.95rem; + font-weight: 600; + margin: 18px 0 8px; + padding-bottom: 4px; + border-bottom: 1px solid rgba(0,0,0,0.08); +} + +.stats-compare { display: flex; flex-direction: column; gap: 6px; } +.stat-line { + display: grid; + grid-template-columns: 60px 1fr 60px; + align-items: center; + font-size: 0.85rem; +} +.stat-line .stat-label { text-align: center; color: rgba(0,0,0,0.6); } +.stat-line .stat-val { font-weight: 600; } +.stat-line .stat-val:first-child { text-align: right; } +.stat-line .stat-val:last-child { text-align: left; } +.stat-bar { display: flex; height: 6px; border-radius: 3px; overflow: hidden; background: #eceff3; margin-bottom: 4px; } +.stat-bar .bar.home { background: #1565c0; } +.stat-bar .bar.away { background: #ef6c00; margin-left: auto; } + +.event-list { list-style: none; margin: 0; padding: 0; } +.event-list li { + display: flex; + align-items: center; + gap: 8px; + padding: 5px 8px; + border-radius: 6px; + font-size: 0.88rem; +} +.event-list li:nth-child(odd) { background: #f6f8fa; } +.event-list li.away-ev { flex-direction: row-reverse; text-align: right; } +.event-list li.away-ev .ev-text { text-align: right; } +.ev-min { min-width: 42px; color: rgba(0,0,0,0.55); } +.ev-icon { font-size: 18px; width: 18px; height: 18px; color: #1565c0; } +.ev-text { display: inline-flex; gap: 6px; align-items: center; flex-wrap: wrap; } +.tag { + background: #e3f2fd; color: #1565c0; border-radius: 8px; padding: 1px 6px; + font-size: 0.7rem; text-transform: capitalize; +} +.tag.miss { background: #ffebee; color: #c62828; } +.card-box { width: 11px; height: 15px; border-radius: 2px; background: #fbc02d; display: inline-block; } +.card-box.red { background: #d32f2f; } diff --git a/BookieClient/src/app/features/pre-match/match-details-dialog.component.ts b/BookieClient/src/app/features/pre-match/match-details-dialog.component.ts new file mode 100644 index 0000000..4232b54 --- /dev/null +++ b/BookieClient/src/app/features/pre-match/match-details-dialog.component.ts @@ -0,0 +1,226 @@ +import { Component, ElementRef, OnDestroy, computed, effect, inject, signal, viewChild } from '@angular/core'; +import { DatePipe } from '@angular/common'; +import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { Chart, registerables } from 'chart.js'; +import { ApiService } from '../../core/services/api.service'; +import { MatchDetails, MatchTeamPrediction, TeamMatchStats } from '../../core/models/models'; + +Chart.register(...registerables); + +interface StatRow { label: string; home: string; away: string; homeNum: number; awayNum: number; } +interface PredRow { + label: string; + homeLlm: number | null; homeOpenAi: number | null; homeActual: number | null; + awayLlm: number | null; awayOpenAi: number | null; awayActual: number | null; +} +interface DialogData { matchId: number; } + +@Component({ + selector: 'app-match-details-dialog', + imports: [ + DatePipe, MatDialogModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule, MatTooltipModule, + ], + templateUrl: './match-details-dialog.component.html', + styleUrl: './match-details-dialog.component.scss', +}) +export class MatchDetailsDialogComponent implements OnDestroy { + private api = inject(ApiService); + readonly data = inject(MAT_DIALOG_DATA); + + readonly loading = signal(true); + readonly errored = signal(false); + readonly details = signal(null); + + readonly statRows = computed(() => { + const d = this.details(); + if (!d) return []; + const h = d.homeStats; + const a = d.awayStats; + if (!h && !a) return []; + const num = (v: number | null | undefined) => (v == null ? 0 : Number(v)); + const txt = (v: number | null | undefined, suffix = '') => (v == null ? '—' : `${v}${suffix}`); + return [ + this.row('Possession', h?.possessionPct, a?.possessionPct, num, txt, '%'), + this.row('Shots', h?.shotsTotal, a?.shotsTotal, num, txt), + this.row('Shots on target', h?.shotsOnTarget, a?.shotsOnTarget, num, txt), + this.row('Corners', h?.corners, a?.corners, num, txt), + this.row('Fouls', h?.fouls, a?.fouls, num, txt), + this.row('Offsides', h?.offsides, a?.offsides, num, txt), + this.row('Yellow cards', h?.yellowCards, a?.yellowCards, num, txt), + this.row('Red cards', h?.redCards, a?.redCards, num, txt), + ]; + }); + + readonly hasStats = computed(() => !!(this.details()?.homeStats || this.details()?.awayStats)); + + private homeChartRef = viewChild>('homePredChart'); + private awayChartRef = viewChild>('awayPredChart'); + private homeChart?: Chart; + private awayChart?: Chart; + + /** Predicted vs actual rows, one per comparable metric (LLM + OpenAI + actual). */ + readonly predRows = computed(() => { + const d = this.details(); + if (!d || (!d.hasPrediction && !d.hasOpenAiPrediction)) return []; + const hp = d.homePrediction; + const ap = d.awayPrediction; + const ho = d.homeOpenAiPrediction; + const ao = d.awayOpenAiPrediction; + const hs = d.homeStats; + const as = d.awayStats; + const n = (v: number | null | undefined) => (v == null ? null : Number(v)); + const homeGoals = d.hasScore ? n(d.homeScoreFt) : null; + const awayGoals = d.hasScore ? n(d.awayScoreFt) : null; + return [ + { label: 'Goals', homeLlm: n(hp?.predictedGoals), homeOpenAi: n(ho?.predictedGoals), homeActual: homeGoals, awayLlm: n(ap?.predictedGoals), awayOpenAi: n(ao?.predictedGoals), awayActual: awayGoals }, + { label: 'Shots', homeLlm: n(hp?.predictedShotsTotal), homeOpenAi: null, homeActual: n(hs?.shotsTotal), awayLlm: n(ap?.predictedShotsTotal), awayOpenAi: null, awayActual: n(as?.shotsTotal) }, + { label: 'On target', homeLlm: n(hp?.predictedShotsOnTarget), homeOpenAi: n(ho?.predictedShotsOnTarget), homeActual: n(hs?.shotsOnTarget), awayLlm: n(ap?.predictedShotsOnTarget), awayOpenAi: n(ao?.predictedShotsOnTarget), awayActual: n(as?.shotsOnTarget) }, + { label: 'Corners', homeLlm: n(hp?.predictedCorners), homeOpenAi: n(ho?.predictedCorners), homeActual: n(hs?.corners), awayLlm: n(ap?.predictedCorners), awayOpenAi: n(ao?.predictedCorners), awayActual: n(as?.corners) }, + { label: 'Fouls', homeLlm: n(hp?.predictedFouls), homeOpenAi: n(ho?.predictedFouls), homeActual: n(hs?.fouls), awayLlm: n(ap?.predictedFouls), awayOpenAi: n(ao?.predictedFouls), awayActual: n(as?.fouls) }, + { label: 'Yellows', homeLlm: n(hp?.predictedYellowCards), homeOpenAi: n(ho?.predictedYellowCards), homeActual: n(hs?.yellowCards), awayLlm: n(ap?.predictedYellowCards), awayOpenAi: n(ao?.predictedYellowCards), awayActual: n(as?.yellowCards) }, + ]; + }); + + /** True once at least one actual value exists (finished match with stats/score). */ + readonly hasActual = computed(() => + this.predRows().some((r) => r.homeActual != null || r.awayActual != null)); + + readonly hasLlm = computed(() => !!this.details()?.hasPrediction); + readonly hasOpenAi = computed(() => !!this.details()?.hasOpenAiPrediction); + + readonly anyPrediction = computed(() => + this.details()?.homePrediction ?? this.details()?.awayPrediction ?? null); + readonly anyOpenAi = computed(() => + this.details()?.homeOpenAiPrediction ?? this.details()?.awayOpenAiPrediction ?? null); + + /** Show the prediction comparison block (LLM and/or OpenAI vs actual). */ + readonly showComparison = computed(() => { + const d = this.details(); + if (!d) return false; + return d.hasPrediction || d.hasOpenAiPrediction; + }); + + constructor() { + this.api.getMatchDetails(this.data.matchId).subscribe({ + next: (d) => { this.details.set(d); this.loading.set(false); }, + error: () => { this.errored.set(true); this.loading.set(false); }, + }); + + effect(() => { + const rows = this.predRows(); + if (!rows.length || this.loading()) return; + // Canvas elements render one tick after details load — defer chart creation. + const timer = setTimeout(() => this.refreshCharts(rows), 0); + return () => clearTimeout(timer); + }); + } + + ngOnDestroy() { + this.homeChart?.destroy(); + this.awayChart?.destroy(); + } + + private refreshCharts(rows: PredRow[]) { + this.homeChart = this.renderTeamChart(this.homeChart, this.homeChartRef()?.nativeElement, rows, 'home'); + this.awayChart = this.renderTeamChart(this.awayChart, this.awayChartRef()?.nativeElement, rows, 'away'); + } + + private renderTeamChart( + existing: Chart | undefined, + canvas: HTMLCanvasElement | undefined, + rows: PredRow[], + side: 'home' | 'away', + ): Chart | undefined { + if (!canvas) return existing; + existing?.destroy(); + const datasets: any[] = []; + if (this.hasLlm()) { + datasets.push({ + label: 'LLM', + data: rows.map((r) => (side === 'home' ? r.homeLlm : r.awayLlm)), + backgroundColor: '#7e57c2', borderRadius: 4, + }); + } + if (this.hasOpenAi()) { + datasets.push({ + label: 'OpenAI', + data: rows.map((r) => (side === 'home' ? r.homeOpenAi : r.awayOpenAi)), + backgroundColor: '#ef6c00', borderRadius: 4, + }); + } + if (this.hasActual()) { + datasets.push({ + label: 'Actual', + data: rows.map((r) => (side === 'home' ? r.homeActual : r.awayActual)), + backgroundColor: '#26a69a', borderRadius: 4, + }); + } + return new Chart(canvas, { + type: 'bar', + data: { labels: rows.map((r) => r.label), datasets }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { legend: { position: 'bottom', labels: { boxWidth: 12 } } }, + scales: { y: { beginAtZero: true, ticks: { precision: 0 } } }, + }, + }); + } + + prediction(side: 'home' | 'away'): MatchTeamPrediction | null | undefined { + return side === 'home' ? this.details()?.homePrediction : this.details()?.awayPrediction; + } + + fmt(v: number | null): string { + return v == null ? '—' : (Number.isInteger(v) ? `${v}` : v.toFixed(2)); + } + + /** Signed difference actual − predicted (for finished matches). */ + delta(actual: number | null, pred: number | null): string { + if (actual == null || pred == null) return '—'; + const d = Math.round((actual - pred) * 100) / 100; + if (d === 0) return '0'; + const sign = d > 0 ? '+' : ''; + return `${sign}${Number.isInteger(d) ? d : d.toFixed(2)}`; + } + + deltaClass(actual: number | null, pred: number | null): string { + if (actual == null || pred == null) return ''; + const d = actual - pred; + if (Math.abs(d) < 0.01) return 'delta-ok'; + return Math.abs(d) <= 1 ? 'delta-warn' : 'delta-bad'; + } + + /** Number of model columns shown per team in the comparison table. */ + modelCount(): number { + let n = (this.hasLlm() ? 1 : 0) + (this.hasOpenAi() ? 1 : 0) + (this.hasActual() ? 1 : 0); + if (this.hasLlm() && this.hasActual()) n += 1; + return n; + } + + private row( + label: string, + h: number | null | undefined, + a: number | null | undefined, + num: (v: number | null | undefined) => number, + txt: (v: number | null | undefined, s?: string) => string, + suffix = '', + ): StatRow { + return { label, home: txt(h, suffix), away: txt(a, suffix), homeNum: num(h), awayNum: num(a) }; + } + + barWidth(row: StatRow, side: 'home' | 'away'): string { + const total = row.homeNum + row.awayNum; + if (total <= 0) return '0%'; + const val = side === 'home' ? row.homeNum : row.awayNum; + return `${Math.round((val / total) * 100)}%`; + } + + minuteLabel(minute: number, added: number): string { + return added > 0 ? `${minute}+${added}'` : `${minute}'`; + } +} diff --git a/BookieClient/src/app/features/pre-match/pre-match.component.html b/BookieClient/src/app/features/pre-match/pre-match.component.html new file mode 100644 index 0000000..acf2a10 --- /dev/null +++ b/BookieClient/src/app/features/pre-match/pre-match.component.html @@ -0,0 +1,421 @@ +
+ + + + @if (loading()) { +
+ @for (s of skeletons; track s) { + +
+
+
+
+
+
+
+
+ } +
+ } @else if (errored()) { + + error_outline +

Could not load the report

+

The API request failed. Check that the backend is running and try again.

+ +
+ } @else if (!hasMatches()) { + + event_busy +

No matches on this date

+

There are no fixtures scheduled for {{ dateControl.value | date: 'fullDate' }}.

+
+ } @else { +
+ {{ report()!.matchCount }} match(es) on {{ report()!.date }} + + @if (selectedCount() > 0) { + {{ selectedCount() }} selected + + } + + +
+ + @for (group of report()!.groups; track group.leagueId + '-' + group.seasonId) { + + + + emoji_events + {{ group.leagueName }} +  — {{ group.country }} + + + Season {{ group.seasonName }} · {{ group.matches.length }} match(es) + + + + @if (group.modelParams) { +
+ model_training + Dixon-Coles model + HA {{ group.modelParams.homeAdvantage }} + ρ {{ group.modelParams.rho }} + @if (group.modelParams.avgHomeGoals != null) { + avg H {{ group.modelParams.avgHomeGoals }} + } + @if (group.modelParams.avgAwayGoals != null) { + avg A {{ group.modelParams.avgAwayGoals }} + } + + {{ group.modelParams.matchesUsed }} matches + @if (group.modelParams.halfLifeDays) { · half-life {{ group.modelParams.halfLifeDays }}d } + · trained {{ group.modelParams.trainedAt | date: 'mediumDate' }} + +
+ } + + @for (m of group.matches; track m.matchId) { + +
+ +
{{ m.kickoffAt | date: 'HH:mm' }}
+
+ {{ m.homeTeamName }} + @if (m.hasScore) { + {{ m.homeScoreFt }} : {{ m.awayScoreFt }} + } @else { + vs + } + {{ m.awayTeamName }} +
+ + {{ statusLabels[m.status] ?? m.status }} + +
+ + @if (m.stadium || m.referee) { +
+ @if (m.stadium) { stadium{{ m.stadium }} } + @if (m.referee) { sports{{ m.referee }} } + @if (m.hasScore) { scheduleHT {{ m.homeScoreHt }}:{{ m.awayScoreHt }} } +
+ } + +
+ + history_toggle_off{{ seasonsLabel(m) }} + + + + + +
+ + @if (m.odds) { +
+ + casino + Market 1X2 (avg {{ m.odds.bookmakerCount }} bookmaker{{ m.odds.bookmakerCount === 1 ? '' : 's' }}) + +
+
+ Home + {{ m.odds.avgHomeOdds | number: '1.2-2' }} + {{ (m.odds.homeImplied * 100) | number: '1.1-1' }}% +
+
+ Draw + {{ m.odds.avgDrawOdds | number: '1.2-2' }} + {{ (m.odds.drawImplied * 100) | number: '1.1-1' }}% +
+
+ Away + {{ m.odds.avgAwayOdds | number: '1.2-2' }} + {{ (m.odds.awayImplied * 100) | number: '1.1-1' }}% +
+
+ @if (m.odds.avgTotalLine != null || m.odds.avgOverOdds != null || m.odds.avgUnderOdds != null) { +
+ Totals O/U + @if (m.odds.avgTotalLine != null) { + Line {{ m.odds.avgTotalLine }} + } + @if (m.odds.avgOverOdds != null) { + + Over {{ m.odds.avgOverOdds | number: '1.2-2' }} + @if (m.odds.overImplied != null) { + {{ (m.odds.overImplied * 100) | number: '1.1-1' }}% + } + + } + @if (m.odds.avgUnderOdds != null) { + + Under {{ m.odds.avgUnderOdds | number: '1.2-2' }} + @if (m.odds.underImplied != null) { + {{ (m.odds.underImplied * 100) | number: '1.1-1' }}% + } + + } +
+ } +
+ } + + @if (m.extraOdds?.length) { +
+ stacked_line_chart Extra markets + + + + + + + + + + + + @for (eo of m.extraOdds; track eo.market + eo.bookmaker) { + + + + + + + + } + +
MarketBookmakerLineOverUnder
{{ extraMarketLabel(eo.market) }}{{ eo.bookmaker }}{{ eo.line }}{{ eo.overOdds | number: '1.2-2' }}{{ eo.underOdds | number: '1.2-2' }}
+
+ } + +
+ @for (t of [m.home, m.away]; track t.teamId) { +
+
+ {{ t.teamName }} + based on {{ t.matchesPlayed }} earlier match(es) +
+ + @if (t.strength) { +
+ fitness_center + + Atk {{ t.strength.attackFactor }} + · Def {{ t.strength.defenseFactor }} + ({{ t.strength.matchesUsed }} matches) + +
+ } + @if (t.oddsApiName) { +
+ link Odds API: {{ t.oddsApiName }} +
+ } + + @if (!t.hasHistory) { +
+ info No historical data in the selected window. +
+ } @else { +
+ sports_soccer + {{ goalsSummary(t) }} +
+ + @if (t.seasonAverages.hasData) { +
+
Possession{{ t.seasonAverages.possession }}%
+
Shots{{ t.seasonAverages.shotsTotal }}
+
On target{{ t.seasonAverages.shotsOnTarget }}
+
Corners{{ t.seasonAverages.corners }}
+
Fouls{{ t.seasonAverages.fouls }}
+
Offsides{{ t.seasonAverages.offsides }}
+
Yellow{{ t.seasonAverages.yellowCards }}
+
Red{{ t.seasonAverages.redCards }}
+
+ } @else { +
Detailed match stats: no data.
+ } + +
+ Form: + @if (t.form.length) { + @for (r of t.form; track $index) { + + } + } @else { + no data + } +
+ +
+ Top scorers (goals + assists so far) + @if (t.topScorers.length) { + + + @for (s of t.topScorers; track s.playerName) { + + + + + + } + +
{{ s.playerName }}{{ s.goals }}G{{ s.assists }}A
+ } @else { +
no data
+ } +
+ } + + @if (t.prediction || t.openAiPrediction || t.actual?.hasData) { +
+ + @if (t.actual?.hasData && (t.prediction || t.openAiPrediction)) { + Predictions vs actual + } @else if (t.actual?.hasData) { + Match statistics + } @else { + Predictions (per this match) + } + + + + + + @if (t.prediction) { } + @if (t.openAiPrediction) { } + @if (t.actual?.hasData) { } + + + + + + @if (t.prediction) { } + @if (t.openAiPrediction) { } + @if (t.actual?.hasData) { } + + @if (t.prediction || t.actual?.shotsTotal != null) { + + + @if (t.prediction) { } + @if (t.openAiPrediction) { } + @if (t.actual?.hasData) { } + + } + + + @if (t.prediction) { } + @if (t.openAiPrediction) { } + @if (t.actual?.hasData) { } + + + + @if (t.prediction) { } + @if (t.openAiPrediction) { } + @if (t.actual?.hasData) { } + + + + @if (t.prediction) { } + @if (t.openAiPrediction) { } + @if (t.actual?.hasData) { } + + + + @if (t.prediction) { } + @if (t.openAiPrediction) { } + @if (t.actual?.hasData) { } + + @if (t.openAiPrediction || t.actual?.hasData) { + + + @if (t.prediction) { } + @if (t.openAiPrediction) { } + @if (t.actual?.hasData) { } + + } + +
MetricLLMOpenAIActual
Goals{{ t.prediction.predictedGoals ?? '—' }}{{ t.openAiPrediction.predictedGoals ?? '—' }}{{ t.actual!.goals ?? '—' }}
Shots{{ t.prediction.predictedShotsTotal ?? '—' }}{{ t.actual!.shotsTotal ?? '—' }}
On target{{ t.prediction.predictedShotsOnTarget ?? '—' }}{{ t.openAiPrediction.predictedShotsOnTarget ?? '—' }}{{ t.actual!.shotsOnTarget ?? '—' }}
Corners{{ t.prediction.predictedCorners ?? '—' }}{{ t.openAiPrediction.predictedCorners ?? '—' }}{{ t.actual!.corners ?? '—' }}
Fouls{{ t.prediction.predictedFouls ?? '—' }}{{ t.openAiPrediction.predictedFouls ?? '—' }}{{ t.actual!.fouls ?? '—' }}
Yellow cards{{ t.prediction.predictedYellowCards ?? '—' }}{{ t.openAiPrediction.predictedYellowCards ?? '—' }}{{ t.actual!.yellowCards }}
Red cards{{ t.openAiPrediction.predictedRedCards ?? '—' }}{{ t.actual!.redCards }}
+ @if (t.openAiPrediction) { +
+ @if (t.openAiPrediction.model) { {{ t.openAiPrediction.model }} } + @if (t.openAiPrediction.confidence) { · {{ t.openAiPrediction.confidence }} confidence } + @if (t.openAiPrediction.predictedAt) { · {{ t.openAiPrediction.predictedAt | date: 'medium' }} } +
+ } + @if (t.prediction) { +
+ LLM model + @if (t.prediction.halfLifeDays) { · half-life {{ t.prediction.halfLifeDays }}d } + · trained {{ t.prediction.modelTrainedAt | date: 'mediumDate' }} + · saved {{ t.prediction.predictedAt | date: 'short' }} +
+ } +
+ } +
+ } +
+
+ } +
+ } + } +
diff --git a/BookieClient/src/app/features/pre-match/pre-match.component.scss b/BookieClient/src/app/features/pre-match/pre-match.component.scss new file mode 100644 index 0000000..81ced0c --- /dev/null +++ b/BookieClient/src/app/features/pre-match/pre-match.component.scss @@ -0,0 +1,382 @@ +.date-field { width: 200px; } +.seasons-field { width: 220px; } + +.result-count { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin: 4px 0 16px; + flex-wrap: wrap; +} +.select-tools { display: inline-flex; align-items: center; gap: 6px; } + +.predict-selected-btn { + background: linear-gradient(135deg, #6a1b9a, #8e24aa); + color: #fff; +} +.predict-selected-btn[disabled] { + background: rgba(0, 0, 0, 0.12); + color: rgba(0, 0, 0, 0.38); +} + +.analyze-btn { + background: linear-gradient(135deg, #1565c0, #1976d2); + color: #fff; +} +.analyze-btn[disabled] { + background: rgba(0, 0, 0, 0.12); + color: rgba(0, 0, 0, 0.38); +} +.analyze-count { margin-left: 4px; font-size: 0.85em; opacity: 0.9; } +@keyframes spin { to { transform: rotate(360deg); } } +.spin { animation: spin 1s linear infinite; } + +.league-panel { + margin-bottom: 16px; + border-radius: 10px !important; + overflow: hidden; +} + +.flag-icon { margin-right: 8px; color: #f9a825; } +.country { font-weight: 400; } + +.match-card { + margin: 12px 0; + padding: 16px; + border-left: 4px solid #1565c0; + transition: box-shadow 0.15s, border-color 0.15s, background 0.15s; +} +.match-card.selected { + border-left-color: #6a1b9a; + background: #faf5fd; + box-shadow: 0 0 0 2px rgba(106, 27, 154, 0.25); +} +.select-box { margin-right: 2px; } + +.match-head { + display: flex; + align-items: center; + gap: 16px; + flex-wrap: wrap; +} + +.kickoff { + font-size: 1.1rem; + font-weight: 600; + background: #eef3fb; + padding: 4px 10px; + border-radius: 6px; +} + +.teams { + display: flex; + align-items: center; + gap: 12px; + font-size: 1.05rem; + flex: 1; +} +.team-name { font-weight: 500; } +.score { font-weight: 700; font-size: 1.15rem; } +.vs { color: rgba(0,0,0,0.4); font-style: italic; } + +.status-badge { + padding: 3px 10px; + border-radius: 12px; + font-size: 0.72rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + color: #fff; +} +.status-scheduled { background: #1976d2; } +.status-live { background: #e53935; animation: pulse 1.4s infinite; } +.status-finished { background: #2e7d32; } +.status-cancelled { background: #757575; } + +@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.55; } } + +.match-meta { + display: flex; + gap: 18px; + margin: 10px 0 4px; + font-size: 0.85rem; + flex-wrap: wrap; +} +.match-meta span { display: inline-flex; align-items: center; gap: 4px; } +.match-meta mat-icon { font-size: 18px; width: 18px; height: 18px; } + +.match-actions { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + margin: 8px 0 2px; + flex-wrap: wrap; +} +.history-note { + display: inline-flex; + align-items: center; + gap: 4px; + font-size: 0.78rem; +} +.history-note mat-icon { font-size: 17px; width: 17px; height: 17px; } + +.action-buttons { display: inline-flex; gap: 8px; flex-wrap: wrap; } +.predict-btn { + background: linear-gradient(135deg, #6a1b9a, #8e24aa); + color: #fff; +} + +.team-panels { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; + margin-top: 14px; +} +@media (max-width: 800px) { + .team-panels { grid-template-columns: 1fr; } +} + +.team-panel { + background: #f8fafc; + border: 1px solid rgba(0,0,0,0.06); + border-radius: 8px; + padding: 12px; +} + +.team-panel-head { + display: flex; + justify-content: space-between; + align-items: baseline; + margin-bottom: 8px; + gap: 8px; +} +.team-panel-name { font-weight: 600; } +.muted .small, .small { font-size: 0.8rem; } + +.no-history { + display: flex; + align-items: center; + gap: 6px; + color: rgba(0,0,0,0.5); + font-style: italic; + padding: 8px 0; +} +.no-history mat-icon { font-size: 18px; width: 18px; height: 18px; } + +.stat-row.goals { + display: flex; + align-items: center; + gap: 6px; + font-weight: 500; + margin-bottom: 10px; +} +.stat-row.goals mat-icon { color: #1565c0; font-size: 20px; width: 20px; height: 20px; } + +.averages-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 8px; + margin-bottom: 12px; +} +@media (max-width: 500px) { .averages-grid { grid-template-columns: repeat(2, 1fr); } } +.avg { + display: flex; + flex-direction: column; + background: #fff; + border: 1px solid rgba(0,0,0,0.06); + border-radius: 6px; + padding: 6px 8px; + font-size: 0.85rem; +} +.avg .muted { font-size: 0.7rem; } + +.form-row { + display: flex; + align-items: center; + gap: 6px; + margin-bottom: 12px; + flex-wrap: wrap; +} +.form-chip { + width: 26px; + height: 26px; + border-radius: 50%; + color: #fff; + font-size: 0.75rem; + font-weight: 700; + display: inline-flex; + align-items: center; + justify-content: center; + border: none; + padding: 0; + cursor: pointer; + transition: transform 0.12s, box-shadow 0.12s; +} +.form-chip:hover { + transform: translateY(-1px) scale(1.08); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25); +} +.form-chip:focus-visible { + outline: 2px solid #1565c0; + outline-offset: 2px; +} +.chip-win { background: var(--bookie-win); } +.chip-draw { background: var(--bookie-draw); } +.chip-loss { background: var(--bookie-loss); } + +.scorer-table { width: 100%; border-collapse: collapse; margin-top: 4px; } +.scorer-table td { padding: 3px 4px; border-bottom: 1px solid rgba(0,0,0,0.05); font-size: 0.85rem; } +.scorer-name { width: 100%; } + +.league-model-bar { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 8px 12px; + margin: 0 16px 12px; + padding: 10px 14px; + background: #f3f6fb; + border-radius: 8px; + font-size: 0.85rem; + mat-icon { font-size: 18px; width: 18px; height: 18px; color: #5e35b1; } +} +.model-label { font-weight: 600; color: #3949ab; } +.model-chip { + background: #fff; + border: 1px solid rgba(94, 53, 177, 0.25); + border-radius: 4px; + padding: 2px 8px; + font-family: var(--font-mono, monospace); + font-size: 0.8rem; +} + +.odds-block, .extra-odds-block { + margin: 10px 0 14px; + padding: 10px 12px; + background: #fafafa; + border-radius: 8px; + border: 1px solid rgba(0, 0, 0, 0.06); +} +.odds-block .small, .extra-odds-block .small { + display: inline-flex; + align-items: center; + gap: 4px; + margin-bottom: 8px; + mat-icon { font-size: 16px; width: 16px; height: 16px; } +} +.odds-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; +} +.odds-cell { + text-align: center; + padding: 8px; + border-radius: 6px; + background: #fff; + border: 1px solid rgba(0, 0, 0, 0.06); + b { display: block; font-size: 1.1rem; margin: 2px 0; } + .implied { font-size: 0.75rem; color: rgba(0, 0, 0, 0.5); } +} +.home-odds b { color: #1565c0; } +.draw-odds b { color: #6a1b9a; } +.away-odds b { color: #e65100; } + +.totals-row { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 8px 12px; + margin-top: 10px; + padding-top: 8px; + border-top: 1px dashed rgba(0, 0, 0, 0.08); +} +.totals-chip { + display: inline-flex; + align-items: baseline; + gap: 6px; + background: #fff; + border: 1px solid rgba(0, 0, 0, 0.08); + border-radius: 6px; + padding: 4px 10px; + font-size: 0.85rem; + .implied { font-size: 0.75rem; color: rgba(0, 0, 0, 0.5); } +} + +.extra-odds-table { + width: 100%; + border-collapse: collapse; + font-size: 0.8rem; + th, td { padding: 4px 8px; border-bottom: 1px solid rgba(0, 0, 0, 0.06); text-align: left; } + .num-col { text-align: right; } +} + +.strength-row, .alias-row { + display: flex; + align-items: center; + gap: 6px; + margin: 6px 0 8px; + font-size: 0.85rem; + mat-icon { font-size: 16px; width: 16px; height: 16px; color: #5e35b1; } +} +.alias-row mat-icon { color: #78909c; font-size: 14px; width: 14px; height: 14px; } +.llm-meta { margin-top: 4px; color: #5e35b1; } + +.pred-block { + margin-top: 12px; + padding-top: 10px; + border-top: 1px solid rgba(0, 0, 0, 0.08); +} +.pred-block > .small { display: block; margin-bottom: 6px; } + +.pred-table { + width: 100%; + border-collapse: collapse; + font-size: 0.85rem; +} +.pred-table th, +.pred-table td { + padding: 5px 8px; + border-bottom: 1px solid rgba(0, 0, 0, 0.06); + text-align: left; +} +.pred-table thead th { + font-size: 0.72rem; + font-weight: 600; + color: rgba(0, 0, 0, 0.55); + text-transform: uppercase; + letter-spacing: 0.03em; + background: #fff; +} +.pred-table tbody tr:last-child td { border-bottom: none; } +.pred-table .num-col { text-align: right; width: 72px; font-weight: 600; } +.pred-table tbody td:first-child { color: rgba(0, 0, 0, 0.65); } +.pred-table .llm-col { color: #5e35b1; } +.pred-table .openai-col { color: #e65100; } +.pred-table .openai-val { color: #bf360c; } +.pred-table .actual-col { color: #00695c; } +.pred-table .actual-val { color: #00695c; font-weight: 700; } +.openai-meta { margin-top: 6px; } + +/* Skeleton */ +.skeleton-list { display: flex; flex-direction: column; gap: 16px; } +.skeleton-card { padding: 16px; } +.sk { background: linear-gradient(90deg, #eceff3 25%, #f6f8fa 37%, #eceff3 63%); background-size: 400% 100%; animation: shimmer 1.4s ease infinite; border-radius: 6px; } +.sk-title { height: 22px; width: 40%; margin-bottom: 12px; } +.sk-line { height: 14px; width: 100%; margin-bottom: 8px; } +.sk-line.short { width: 60%; } +.sk-panels { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 12px; } +.sk-panel { height: 140px; } +@keyframes shimmer { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } } + +.state-card { + text-align: center; + padding: 48px 24px; + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; +} +.state-icon { font-size: 56px; width: 56px; height: 56px; color: rgba(0,0,0,0.3); } diff --git a/BookieClient/src/app/features/pre-match/pre-match.component.ts b/BookieClient/src/app/features/pre-match/pre-match.component.ts new file mode 100644 index 0000000..28ffa57 --- /dev/null +++ b/BookieClient/src/app/features/pre-match/pre-match.component.ts @@ -0,0 +1,230 @@ +import { Component, computed, inject, signal } from '@angular/core'; +import { FormControl, ReactiveFormsModule } from '@angular/forms'; +import { MatCardModule } from '@angular/material/card'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatChipsModule } from '@angular/material/chips'; +import { MatExpansionModule } from '@angular/material/expansion'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { MatSelectModule } from '@angular/material/select'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatBadgeModule } from '@angular/material/badge'; +import { MatDialog } from '@angular/material/dialog'; +import { DatePipe, DecimalPipe } from '@angular/common'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { ApiService } from '../../core/services/api.service'; +import { FormResult, MatchReport, PreMatchReport, TeamReport } from '../../core/models/models'; +import { exportReportCsv, exportReportPdf } from '../../core/utils/report-export'; +import { countAnalyzableMatches, exportPredictionAnalysisPdf } from '../../core/utils/prediction-analysis-export'; +import { MatchDetailsDialogComponent } from './match-details-dialog.component'; +import { HeadToHeadDialogComponent } from './head-to-head-dialog.component'; +import { PredictionDialogComponent } from './prediction-dialog.component'; + +@Component({ + selector: 'app-pre-match', + imports: [ + ReactiveFormsModule, DatePipe, DecimalPipe, + MatCardModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, MatButtonModule, + MatIconModule, MatChipsModule, MatExpansionModule, MatProgressSpinnerModule, MatTooltipModule, + MatSelectModule, MatCheckboxModule, MatBadgeModule, + ], + templateUrl: './pre-match.component.html', + styleUrl: './pre-match.component.scss', +}) +export class PreMatchComponent { + private api = inject(ApiService); + private dialog = inject(MatDialog); + private snack = inject(MatSnackBar); + + readonly dateControl = new FormControl(new Date(), { nonNullable: true }); + readonly seasonsBackControl = new FormControl(0, { nonNullable: true }); + readonly loading = signal(false); + readonly analyzing = signal(false); + readonly report = signal(null); + readonly errored = signal(false); + + readonly hasMatches = computed(() => (this.report()?.matchCount ?? 0) > 0); + readonly analyzableCount = computed(() => { + const r = this.report(); + return r ? countAnalyzableMatches(r) : 0; + }); + readonly skeletons = [0, 1, 2]; + + /** Match ids selected for batch prediction. */ + readonly selected = signal>(new Set()); + readonly selectedCount = computed(() => this.selected().size); + + readonly seasonsBackOptions = [ + { value: 0, label: 'Current season only' }, + { value: 1, label: 'Current + 1 previous' }, + { value: 2, label: 'Current + 2 previous' }, + { value: 3, label: 'Current + 3 previous' }, + { value: 5, label: 'Current + 5 previous' }, + ]; + + readonly statusLabels: Record = { + scheduled: 'Scheduled', live: 'Live', finished: 'Finished', cancelled: 'Cancelled', + }; + + constructor() { + this.load(); + } + + private toIso(date: Date): string { + const y = date.getFullYear(); + const m = String(date.getMonth() + 1).padStart(2, '0'); + const d = String(date.getDate()).padStart(2, '0'); + return `${y}-${m}-${d}`; + } + + load() { + this.loading.set(true); + this.errored.set(false); + this.report.set(null); + this.selected.set(new Set()); + const iso = this.toIso(this.dateControl.value); + this.api.getPreMatchReport(iso, this.seasonsBackControl.value).subscribe({ + next: (r) => { this.report.set(r); this.loading.set(false); }, + error: () => { this.errored.set(true); this.loading.set(false); }, + }); + } + + seasonsLabel(m: MatchReport): string { + const s = m.seasonsIncluded; + if (!s || s.length === 0) return ''; + return s.length === 1 ? `Season ${s[0]}` : `Seasons ${s.join(', ')}`; + } + + chipClass(result: string): string { + return result === 'W' ? 'chip-win' : result === 'L' ? 'chip-loss' : 'chip-draw'; + } + + private static readonly MONTHS = [ + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', + ]; + + formTooltip(f: FormResult): string { + const d = new Date(f.kickoffAt); + const date = `${String(d.getDate()).padStart(2, '0')} ${PreMatchComponent.MONTHS[d.getMonth()]} ${d.getFullYear()}`; + const venue = f.isHome ? 'home vs' : 'away at'; + const outcome = f.result === 'W' ? 'Won' : f.result === 'L' ? 'Lost' : 'Drew'; + return `${date} · ${venue} ${f.opponentName} · ${outcome} ${f.goalsFor}-${f.goalsAgainst} · click for stats`; + } + + openMatch(matchId: number) { + this.dialog.open(MatchDetailsDialogComponent, { + data: { matchId }, + width: '780px', + maxWidth: '95vw', + maxHeight: '90vh', + autoFocus: false, + }); + } + + openHeadToHead(m: MatchReport) { + this.dialog.open(HeadToHeadDialogComponent, { + data: { + teamAId: m.homeTeamId, + teamBId: m.awayTeamId, + teamAName: m.homeTeamName, + teamBName: m.awayTeamName, + beforeMatchId: m.matchId, + }, + width: '560px', + maxWidth: '95vw', + autoFocus: false, + }); + } + + isSelected(matchId: number): boolean { + return this.selected().has(matchId); + } + + toggleSelected(matchId: number) { + const next = new Set(this.selected()); + if (next.has(matchId)) next.delete(matchId); + else next.add(matchId); + this.selected.set(next); + } + + clearSelection() { + this.selected.set(new Set()); + } + + selectAll() { + const ids = new Set(); + for (const g of this.report()?.groups ?? []) { + for (const m of g.matches) ids.add(m.matchId); + } + this.selected.set(ids); + } + + openPrediction(m: MatchReport) { + this.openPredictionFor([m.matchId]); + } + + predictSelected() { + const ids = [...this.selected()]; + if (ids.length) this.openPredictionFor(ids); + } + + private openPredictionFor(matchIds: number[]) { + this.dialog.open(PredictionDialogComponent, { + data: { matchIds }, + width: matchIds.length > 1 ? '680px' : '600px', + maxWidth: '95vw', + maxHeight: '92vh', + autoFocus: false, + }); + } + + statusClass(status: string): string { + return `status-${status}`; + } + + goalsSummary(t: TeamReport): string { + const g = t.goalsForAgainst; + return g.hasData ? `${g.avgGoalsFor} scored / ${g.avgGoalsAgainst} conceded per match` : 'no historical data'; + } + + extraMarketLabel(market: string): string { + switch (market) { + case 'corners_total': return 'Corners O/U'; + case 'cards_total': return 'Cards O/U'; + default: return market; + } + } + + exportCsv() { const r = this.report(); if (r) exportReportCsv(r); } + async exportPdf() { const r = this.report(); if (r) await exportReportPdf(r); } + + async analyze() { + const r = this.report(); + if (!r || this.analyzing()) return; + if (this.analyzableCount() === 0) { + this.snack.open( + 'No finished matches with complete LLM, OpenAI and actual data for both teams.', + 'OK', + { duration: 5000 }, + ); + return; + } + this.analyzing.set(true); + try { + const { included, skipped } = await exportPredictionAnalysisPdf(r); + this.snack.open( + `Analysis PDF downloaded (${included} match${included === 1 ? '' : 'es'}, ${skipped} skipped).`, + 'OK', + { duration: 4000 }, + ); + } catch { + this.snack.open('Failed to generate analysis PDF.', 'Dismiss', { duration: 5000 }); + } finally { + this.analyzing.set(false); + } + } +} diff --git a/BookieClient/src/app/features/pre-match/prediction-dialog.component.html b/BookieClient/src/app/features/pre-match/prediction-dialog.component.html new file mode 100644 index 0000000..3314b0a --- /dev/null +++ b/BookieClient/src/app/features/pre-match/prediction-dialog.component.html @@ -0,0 +1,87 @@ +
+
+ insights + {{ isBatch ? 'Match projections' : 'Match projection' }} + @if (isBatch && !loading()) { + · {{ predictions().length }} matches + } +
+ +
+ + + @if (loading()) { +
+ +

Crunching historical data and asking the model…

+
+ } @else if (errored()) { +
+ cloud_off +

{{ errorMessage() }}

+
+ } @else if (!predictions().length) { +
+ search_off +

No projection could be produced for the selected match(es).

+
+ } @else { + @for (p of predictions(); track p.matchId) { +
+
+ {{ p.homeTeam }} vs {{ p.awayTeam }} + — {{ p.league }} · {{ p.kickoffAt | date: 'EEE d MMM y, HH:mm' }} +
+ + + + + + + + + + + @for (row of rows; track row.key) { + + + + + + } + +
Expected{{ p.homeTeam }}{{ p.awayTeam }}
{{ row.icon }}{{ row.label }}{{ cell(p.home[row.key]) }}{{ cell(p.away[row.key]) }}
+ +
+ Confidence + {{ p.confidence }} +
+ +

{{ p.reasoning }}

+ + @if (p.flags.length) { +
+ @for (f of p.flags; track $index) { +
warning{{ f }}
+ } +
+ } +
+ } + +

+ Statistical projection for analytical purposes only — not a guaranteed outcome. Generated by {{ predictions()[0].model }}. +

+ } +
+ + + @if (!loading() && !errored() && predictions().length) { + + } + + diff --git a/BookieClient/src/app/features/pre-match/prediction-dialog.component.scss b/BookieClient/src/app/features/pre-match/prediction-dialog.component.scss new file mode 100644 index 0000000..b8f0138 --- /dev/null +++ b/BookieClient/src/app/features/pre-match/prediction-dialog.component.scss @@ -0,0 +1,60 @@ +.dlg-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + padding: 16px 16px 0; +} +.comp { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; } +.comp mat-icon { font-size: 20px; width: 20px; height: 20px; color: #6a1b9a; } +.close-btn { margin: -8px -8px 0 0; } + +.dlg-loading { + display: flex; flex-direction: column; align-items: center; gap: 14px; + padding: 40px; min-width: 420px; text-align: center; +} +.empty { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 32px; min-width: 380px; text-align: center; } +.empty mat-icon { font-size: 40px; width: 40px; height: 40px; color: rgba(0,0,0,0.3); } + +.pred-block { padding: 4px 0; } +.pred-block + .pred-block { + margin-top: 20px; + padding-top: 20px; + border-top: 2px solid rgba(106, 27, 154, 0.15); +} + +.head-line { display: flex; flex-direction: column; margin: 4px 0 12px; font-weight: 600; } +.head-line .muted { font-weight: 400; font-size: 0.82rem; } + +.pred-table { width: 100%; border-collapse: collapse; } +.pred-table th, .pred-table td { padding: 8px 10px; text-align: center; border-bottom: 1px solid rgba(0,0,0,0.08); } +.pred-table thead th { font-size: 0.82rem; color: rgba(0,0,0,0.6); font-weight: 600; } +.pred-table .metric-col { text-align: left; } +.pred-table td.metric-col { + display: flex; align-items: center; gap: 6px; font-weight: 500; border-bottom: 1px solid rgba(0,0,0,0.08); +} +.pred-table td.metric-col mat-icon { font-size: 18px; width: 18px; height: 18px; color: #6a1b9a; } +.pred-table tbody tr:nth-child(odd) td { background: #faf7fd; } + +.conf-line { display: flex; align-items: center; gap: 8px; margin: 12px 0 4px; } +.conf-badge { + padding: 3px 12px; border-radius: 12px; font-size: 0.72rem; font-weight: 700; + text-transform: uppercase; letter-spacing: 0.4px; color: #fff; +} +.conf-high { background: #2e7d32; } +.conf-medium { background: #f9a825; } +.conf-low { background: #c62828; } + +.section-title { + font-size: 0.95rem; font-weight: 600; margin: 16px 0 6px; + padding-bottom: 4px; border-bottom: 1px solid rgba(0,0,0,0.08); +} +.reasoning { margin: 0; line-height: 1.5; font-size: 0.9rem; } + +.flags { display: flex; flex-direction: column; gap: 6px; margin-top: 12px; } +.flag { + display: flex; align-items: center; gap: 6px; font-size: 0.82rem; + background: #fff8e1; border: 1px solid #ffe082; border-radius: 6px; padding: 6px 10px; +} +.flag mat-icon { font-size: 18px; width: 18px; height: 18px; color: #f9a825; } + +.disclaimer { margin: 16px 0 0; font-size: 0.72rem; font-style: italic; } diff --git a/BookieClient/src/app/features/pre-match/prediction-dialog.component.ts b/BookieClient/src/app/features/pre-match/prediction-dialog.component.ts new file mode 100644 index 0000000..e2ff501 --- /dev/null +++ b/BookieClient/src/app/features/pre-match/prediction-dialog.component.ts @@ -0,0 +1,74 @@ +import { Component, inject, signal } from '@angular/core'; +import { DatePipe } from '@angular/common'; +import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { ApiService } from '../../core/services/api.service'; +import { MatchPrediction, MetricEstimate, TeamPrediction } from '../../core/models/models'; +import { exportPredictionsPdf } from '../../core/utils/report-export'; + +interface DialogData { matchIds: number[]; } + +interface PredRow { + label: string; + icon: string; + key: keyof TeamPrediction; +} + +@Component({ + selector: 'app-prediction-dialog', + imports: [ + DatePipe, MatDialogModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule, + ], + templateUrl: './prediction-dialog.component.html', + styleUrl: './prediction-dialog.component.scss', +}) +export class PredictionDialogComponent { + private api = inject(ApiService); + readonly data = inject(MAT_DIALOG_DATA); + + readonly loading = signal(true); + readonly errored = signal(false); + readonly errorMessage = signal(''); + readonly predictions = signal([]); + + readonly rows: PredRow[] = [ + { label: 'Goals', icon: 'sports_soccer', key: 'goals' }, + { label: 'Shots on target', icon: 'my_location', key: 'shotsOnTarget' }, + { label: 'Corners', icon: 'flag', key: 'corners' }, + { label: 'Fouls', icon: 'front_hand', key: 'fouls' }, + { label: 'Yellow cards', icon: 'style', key: 'yellowCards' }, + { label: 'Red cards', icon: 'style', key: 'redCards' }, + ]; + + get isBatch(): boolean { + return this.data.matchIds.length > 1; + } + + constructor() { + this.api.predictMatches(this.data.matchIds).subscribe({ + next: (p) => { this.predictions.set(p); this.loading.set(false); }, + error: (err) => { + this.errorMessage.set(err?.error?.detail || 'The prediction service is unavailable. Check the OpenAI API key configuration and try again.'); + this.errored.set(true); + this.loading.set(false); + }, + }); + } + + confidenceClass(p: MatchPrediction): string { + const c = p.confidence?.toLowerCase() ?? ''; + return c === 'high' ? 'conf-high' : c === 'medium' ? 'conf-medium' : 'conf-low'; + } + + cell(m: MetricEstimate): string { + const r = (n: number) => (Math.round(n * 10) / 10).toString(); + return `${r(m.estimate)} (${r(m.low)}–${r(m.high)})`; + } + + async exportPdf() { + const p = this.predictions(); + if (p.length) await exportPredictionsPdf(p); + } +} diff --git a/BookieClient/src/app/features/stats/player-stats-dialog.component.ts b/BookieClient/src/app/features/stats/player-stats-dialog.component.ts new file mode 100644 index 0000000..3987f75 --- /dev/null +++ b/BookieClient/src/app/features/stats/player-stats-dialog.component.ts @@ -0,0 +1,154 @@ +import { Component, inject, signal } from '@angular/core'; +import { DatePipe } from '@angular/common'; +import { MAT_DIALOG_DATA, MatDialog, MatDialogModule } from '@angular/material/dialog'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { MatTableModule } from '@angular/material/table'; +import { MatChipsModule } from '@angular/material/chips'; +import { ApiService } from '../../core/services/api.service'; +import { PlayerStats } from '../../core/models/models'; +import { MatchDetailsDialogComponent } from '../pre-match/match-details-dialog.component'; + +interface DialogData { playerId: number; } + +@Component({ + selector: 'app-player-stats-dialog', + imports: [ + DatePipe, MatDialogModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule, + MatTooltipModule, MatTableModule, MatChipsModule, + ], + template: ` +

+ person + {{ stats()?.fullName ?? 'Player statistics' }} +

+ + + @if (loading()) { +
+ } @else if (errored()) { +
error_outline Could not load player statistics.
+ } @else if (stats(); as s) { +
+ @if (s.primaryPosition) { {{ s.primaryPosition }} } + @if (s.nationality) { {{ s.nationality }} } + @if (s.currentTeam) { · {{ s.currentTeam }} } + @if (s.birthDate) { · born {{ s.birthDate | date: 'mediumDate' }} } +
+ + @if (!s.hasData) { +
info No goals, assists or cards recorded yet.
+ } @else { +
+
{{ s.totalGoals }}Goals
+
{{ s.totalAssists }}Assists
+
{{ s.matchesScored }}Matches scored
+
{{ s.yellowCards }}Yellow
+
{{ s.redCards }}Red
+
+ +
+ Open play: {{ s.goalsOpenPlay }} · Penalties: {{ s.goalsPenalty }} · Own goals: {{ s.goalsOwn }} +
+ + @if (s.seasons.length) { +

By season

+ + + + + + + + + + + + + + + + + + + +
Season{{ r.seasonName }}League{{ r.leagueName }}G{{ r.goals }}A{{ r.assists }}
+ } + + @if (s.recentGoals.length) { +

Recent goals

+
    + @for (g of s.recentGoals; track g.matchId + '-' + g.minute) { +
  • + {{ g.kickoffAt | date: 'mediumDate' }} + {{ g.homeTeamName }} vs {{ g.awayTeamName }} + {{ minuteLabel(g.minute, g.addedTime) }} + @if (g.goalType !== 'open_play') { {{ g.goalType }} } +
  • + } +
+ } + } + } +
+ + + + +`, + styles: [` + :host { display: block; } + h2[mat-dialog-title] { display: flex; align-items: center; gap: 8px; } + h3 { margin: 18px 0 6px; font-size: 0.95rem; } + .center { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 28px 0; } + .muted { color: rgba(0,0,0,0.55); } + .meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; } + .chip { background: #e3f2fd; color: #1565c0; border-radius: 12px; padding: 2px 10px; font-size: 0.8rem; font-weight: 600; } + .tiles { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; } + .tile { display: flex; flex-direction: column; align-items: center; background: #f5f5f7; border-radius: 10px; padding: 12px 6px; } + .tile .num { font-size: 1.5rem; font-weight: 700; } + .tile .num.yellow { color: #c9a800; } + .tile .num.red { color: #c62828; } + .tile .lbl { font-size: 0.72rem; color: rgba(0,0,0,0.6); text-align: center; } + .breakdown { margin-top: 10px; font-size: 0.82rem; } + table.mini { width: 100%; } + .num-col { text-align: right; width: 48px; } + ul.goals { list-style: none; margin: 0; padding: 0; } + ul.goals li { display: flex; align-items: center; gap: 10px; padding: 7px 4px; border-bottom: 1px solid #eee; cursor: pointer; font-size: 0.85rem; } + ul.goals li:hover { background: #f0f7ff; } + ul.goals .date { color: rgba(0,0,0,0.55); min-width: 96px; } + ul.goals .fixture { flex: 1; } + ul.goals .min { font-weight: 600; } + ul.goals .type { background: #fff3e0; color: #e65100; border-radius: 8px; padding: 1px 6px; font-size: 0.72rem; } + `], +}) +export class PlayerStatsDialogComponent { + private api = inject(ApiService); + private dialog = inject(MatDialog); + readonly data = inject(MAT_DIALOG_DATA); + + readonly loading = signal(true); + readonly errored = signal(false); + readonly stats = signal(null); + + readonly seasonCols = ['season', 'league', 'goals', 'assists']; + + constructor() { + this.api.getPlayerStats(this.data.playerId).subscribe({ + next: (s) => { this.stats.set(s); this.loading.set(false); }, + error: () => { this.errored.set(true); this.loading.set(false); }, + }); + } + + minuteLabel(minute: number, added: number): string { + return added > 0 ? `${minute}+${added}'` : `${minute}'`; + } + + openMatch(matchId: number) { + this.dialog.open(MatchDetailsDialogComponent, { + data: { matchId }, width: '640px', maxWidth: '95vw', autoFocus: false, + }); + } +} diff --git a/BookieClient/src/app/features/stats/team-stats-dialog.component.ts b/BookieClient/src/app/features/stats/team-stats-dialog.component.ts new file mode 100644 index 0000000..654f20d --- /dev/null +++ b/BookieClient/src/app/features/stats/team-stats-dialog.component.ts @@ -0,0 +1,206 @@ +import { Component, computed, inject, signal } from '@angular/core'; +import { DatePipe } from '@angular/common'; +import { MAT_DIALOG_DATA, MatDialog, MatDialogModule } from '@angular/material/dialog'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { MatTableModule } from '@angular/material/table'; +import { ApiService } from '../../core/services/api.service'; +import { FormResult, TeamStats } from '../../core/models/models'; +import { MatchDetailsDialogComponent } from '../pre-match/match-details-dialog.component'; + +interface DialogData { teamId: number; } +interface AvgRow { label: string; value: string; } + +@Component({ + selector: 'app-team-stats-dialog', + imports: [ + DatePipe, MatDialogModule, MatButtonModule, MatIconModule, MatProgressSpinnerModule, + MatTooltipModule, MatTableModule, + ], + template: ` +

+ groups + {{ stats()?.name ?? 'Team statistics' }} +

+ + + @if (loading()) { +
+ } @else if (errored()) { +
error_outline Could not load team statistics.
+ } @else if (stats(); as s) { +
+ @if (s.city) { {{ s.city }} } + @if (s.stadium) { · {{ s.stadium }} } +
+ + @if (!s.hasData) { +
info No finished matches recorded yet.
+ } @else { +
+
{{ s.played }}Played
+
{{ s.wins }}Won
+
{{ s.draws }}Drawn
+
{{ s.losses }}Lost
+
{{ s.goalsFor }}:{{ s.goalsAgainst }}Goals
+
{{ s.winPct }}%Win rate
+
+ + @if (s.form.length) { +

Form (recent → latest)

+
+ @for (f of s.form; track f.matchId) { + {{ f.result }} + } +
+ } + + @if (avgRows().length) { +

Average per match

+
+ @for (r of avgRows(); track r.label) { +
{{ r.value }}{{ r.label }}
+ } +
+ } + + @if (s.topScorers.length) { +

Top scorers

+ + + + + + + + + + + + + + + +
Player{{ r.playerName }}G{{ r.goals }}A{{ r.assists }}
+ } + + @if (s.seasons.length) { +

By season

+ + + + + + + + + + + + + + + +
Season{{ r.seasonName }}W-D-L{{ r.wins }}-{{ r.draws }}-{{ r.losses }}Goals{{ r.goalsFor }}:{{ r.goalsAgainst }}
+ } + + @if (s.recentMatches.length) { +

Recent matches

+
    + @for (m of s.recentMatches; track m.matchId) { +
  • + {{ m.kickoffAt | date: 'mediumDate' }} + {{ m.homeTeamName }} {{ m.homeScoreFt }}–{{ m.awayScoreFt }} {{ m.awayTeamName }} +
  • + } +
+ } + } + } +
+ + + + +`, + styles: [` + :host { display: block; } + h2[mat-dialog-title] { display: flex; align-items: center; gap: 8px; } + h3 { margin: 18px 0 6px; font-size: 0.95rem; } + .center { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 28px 0; } + .muted { color: rgba(0,0,0,0.55); } + .meta { display: flex; gap: 6px; margin-bottom: 12px; } + .tiles { display: grid; grid-template-columns: repeat(6, 1fr); gap: 8px; } + .tile { display: flex; flex-direction: column; align-items: center; background: #f5f5f7; border-radius: 10px; padding: 10px 4px; } + .tile .num { font-size: 1.25rem; font-weight: 700; } + .tile .num.win { color: #2e7d32; } + .tile .num.draw { color: #616161; } + .tile .num.loss { color: #c62828; } + .tile .lbl { font-size: 0.68rem; color: rgba(0,0,0,0.6); text-align: center; } + .form { display: flex; gap: 6px; } + .pill { width: 26px; height: 26px; border-radius: 6px; display: flex; align-items: center; justify-content: center; + font-weight: 700; font-size: 0.8rem; color: #fff; cursor: pointer; background: #9e9e9e; } + .pill.w { background: #2e7d32; } .pill.d { background: #9e9e9e; } .pill.l { background: #c62828; } + .avg-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; } + .avg { background: #f5f5f7; border-radius: 8px; padding: 8px; display: flex; flex-direction: column; align-items: center; } + .avg .v { font-weight: 700; } + .avg .k { font-size: 0.68rem; color: rgba(0,0,0,0.6); text-align: center; } + table.mini { width: 100%; } + .num-col { text-align: right; } + ul.matches { list-style: none; margin: 0; padding: 0; } + ul.matches li { display: flex; gap: 10px; padding: 7px 4px; border-bottom: 1px solid #eee; cursor: pointer; font-size: 0.85rem; } + ul.matches li:hover { background: #f0f7ff; } + ul.matches .date { color: rgba(0,0,0,0.55); min-width: 96px; } + `], +}) +export class TeamStatsDialogComponent { + private api = inject(ApiService); + private dialog = inject(MatDialog); + readonly data = inject(MAT_DIALOG_DATA); + + readonly loading = signal(true); + readonly errored = signal(false); + readonly stats = signal(null); + + readonly scorerCols = ['player', 'goals', 'assists']; + readonly seasonCols = ['season', 'record', 'gf']; + + readonly avgRows = computed(() => { + const a = this.stats()?.averages; + if (!a || !a.matchesPlayed) return []; + const v = (x: number | null | undefined, suffix = '') => (x == null ? '—' : `${x}${suffix}`); + return [ + { label: 'Possession', value: v(a.possession, '%') }, + { label: 'Shots', value: v(a.shotsTotal) }, + { label: 'On target', value: v(a.shotsOnTarget) }, + { label: 'Corners', value: v(a.corners) }, + { label: 'Fouls', value: v(a.fouls) }, + { label: 'Offsides', value: v(a.offsides) }, + { label: 'Yellow', value: v(a.yellowCards) }, + { label: 'Red', value: v(a.redCards) }, + ]; + }); + + constructor() { + this.api.getTeamStats(this.data.teamId).subscribe({ + next: (s) => { this.stats.set(s); this.loading.set(false); }, + error: () => { this.errored.set(true); this.loading.set(false); }, + }); + } + + formTip(f: FormResult): string { + const date = new Date(f.kickoffAt).toLocaleDateString(); + const venue = f.isHome ? 'home vs' : 'away at'; + const outcome = f.result === 'W' ? 'Won' : f.result === 'L' ? 'Lost' : 'Drew'; + return `${date} · ${venue} ${f.opponentName} · ${outcome} ${f.goalsFor}-${f.goalsAgainst}`; + } + + openMatch(matchId: number) { + this.dialog.open(MatchDetailsDialogComponent, { + data: { matchId }, width: '640px', maxWidth: '95vw', autoFocus: false, + }); + } +} diff --git a/BookieClient/src/app/layout/shell.component.html b/BookieClient/src/app/layout/shell.component.html new file mode 100644 index 0000000..163e768 --- /dev/null +++ b/BookieClient/src/app/layout/shell.component.html @@ -0,0 +1,37 @@ + + + + sports_soccer + Bookie + + + + + + + + + + + + @for (item of nav; track item.path) { + + {{ item.icon }} + {{ item.label }} + + } + + + + + + + diff --git a/BookieClient/src/app/layout/shell.component.scss b/BookieClient/src/app/layout/shell.component.scss new file mode 100644 index 0000000..2a9bf2c --- /dev/null +++ b/BookieClient/src/app/layout/shell.component.scss @@ -0,0 +1,33 @@ +:host { display: block; height: 100%; } + +.app-toolbar { + position: sticky; + top: 0; + z-index: 10; +} + +.brand { + display: flex; + align-items: center; + gap: 8px; + font-weight: 600; + margin-left: 8px; +} + +.app-container { + height: calc(100% - 64px); +} + +.app-sidenav { + width: 240px; + border-right: 1px solid rgba(0, 0, 0, 0.08); +} + +.active-link { + background: rgba(0, 0, 0, 0.06); + font-weight: 600; +} + +.app-content { + background: #f4f6f9; +} diff --git a/BookieClient/src/app/layout/shell.component.ts b/BookieClient/src/app/layout/shell.component.ts new file mode 100644 index 0000000..42efb1e --- /dev/null +++ b/BookieClient/src/app/layout/shell.component.ts @@ -0,0 +1,47 @@ +import { Component, inject, signal } from '@angular/core'; +import { RouterOutlet, RouterLink, RouterLinkActive, Router } from '@angular/router'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatListModule } from '@angular/material/list'; +import { MatIconModule } from '@angular/material/icon'; +import { MatButtonModule } from '@angular/material/button'; +import { MatMenuModule } from '@angular/material/menu'; +import { AuthService } from '../core/services/auth.service'; + +interface NavItem { path: string; label: string; icon: string; } + +@Component({ + selector: 'app-shell', + imports: [ + RouterOutlet, RouterLink, RouterLinkActive, + MatToolbarModule, MatSidenavModule, MatListModule, MatIconModule, MatButtonModule, MatMenuModule, + ], + templateUrl: './shell.component.html', + styleUrl: './shell.component.scss', +}) +export class ShellComponent { + private auth = inject(AuthService); + private router = inject(Router); + + readonly opened = signal(true); + readonly username = this.auth.username; + readonly role = this.auth.role; + + readonly nav: NavItem[] = [ + { path: '/dashboard', label: 'Dashboard', icon: 'dashboard' }, + { path: '/pre-match', label: 'Pre-Match Reports', icon: 'query_stats' }, + { path: '/matches', label: 'Matches', icon: 'sports_soccer' }, + { path: '/leagues', label: 'Leagues', icon: 'emoji_events' }, + { path: '/seasons', label: 'Seasons', icon: 'calendar_month' }, + { path: '/teams', label: 'Teams', icon: 'groups' }, + { path: '/players', label: 'Players', icon: 'person' }, + { path: '/contracts', label: 'Contracts', icon: 'description' }, + ]; + + toggle() { this.opened.update((v) => !v); } + + logout() { + this.auth.logout(); + this.router.navigate(['/login']); + } +} diff --git a/BookieClient/src/app/shared/confirm-dialog.component.ts b/BookieClient/src/app/shared/confirm-dialog.component.ts new file mode 100644 index 0000000..14525d6 --- /dev/null +++ b/BookieClient/src/app/shared/confirm-dialog.component.ts @@ -0,0 +1,25 @@ +import { Component, inject } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; + +export interface ConfirmData { title: string; message: string; confirmText?: string; } + +@Component({ + selector: 'app-confirm-dialog', + imports: [MatDialogModule, MatButtonModule, MatIconModule], + template: ` +

{{ data.title }}

+ {{ data.message }} + + + + + `, +}) +export class ConfirmDialogComponent { + readonly data = inject(MAT_DIALOG_DATA); + readonly ref = inject(MatDialogRef); +} diff --git a/BookieClient/src/environments/environment.prod.ts b/BookieClient/src/environments/environment.prod.ts new file mode 100644 index 0000000..9934449 --- /dev/null +++ b/BookieClient/src/environments/environment.prod.ts @@ -0,0 +1,4 @@ +export const environment = { + production: true, + apiBaseUrl: '/api', +}; diff --git a/BookieClient/src/environments/environment.ts b/BookieClient/src/environments/environment.ts new file mode 100644 index 0000000..2ea16b6 --- /dev/null +++ b/BookieClient/src/environments/environment.ts @@ -0,0 +1,4 @@ +export const environment = { + production: false, + apiBaseUrl: 'http://localhost:5210/api', +}; diff --git a/BookieClient/src/index.html b/BookieClient/src/index.html new file mode 100644 index 0000000..6aaeca1 --- /dev/null +++ b/BookieClient/src/index.html @@ -0,0 +1,16 @@ + + + + + BookieClient + + + + + + + + + + + diff --git a/BookieClient/src/main.ts b/BookieClient/src/main.ts new file mode 100644 index 0000000..5df75f9 --- /dev/null +++ b/BookieClient/src/main.ts @@ -0,0 +1,6 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { App } from './app/app'; + +bootstrapApplication(App, appConfig) + .catch((err) => console.error(err)); diff --git a/BookieClient/src/styles.scss b/BookieClient/src/styles.scss new file mode 100644 index 0000000..be15b2c --- /dev/null +++ b/BookieClient/src/styles.scss @@ -0,0 +1,68 @@ +@use '@angular/material' as mat; + +html { + color-scheme: light; + @include mat.theme(( + color: ( + theme-type: light, + primary: mat.$azure-palette, + tertiary: mat.$blue-palette, + ), + typography: Roboto, + density: 0, + )); + + --bookie-win: #2e7d32; + --bookie-draw: #9e9e9e; + --bookie-loss: #c62828; +} + +html, body { + height: 100%; + margin: 0; + font-family: Roboto, 'Helvetica Neue', sans-serif; + background: #f4f6f9; +} + +* { box-sizing: border-box; } + +.page { + padding: 24px; + max-width: 1400px; + margin: 0 auto; +} + +.page-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + margin-bottom: 20px; + flex-wrap: wrap; +} + +.page-header h1 { + margin: 0; + font-size: 1.6rem; + font-weight: 500; +} + +.spacer { flex: 1 1 auto; } + +.full-width { width: 100%; } + +.mono { font-variant-numeric: tabular-nums; } + +.muted { color: rgba(0, 0, 0, 0.55); } + +.toolbar-row { + display: flex; + gap: 12px; + align-items: center; + flex-wrap: wrap; + margin-bottom: 16px; +} + +table { width: 100%; } + +.actions-cell { white-space: nowrap; text-align: right; } diff --git a/BookieClient/tsconfig.app.json b/BookieClient/tsconfig.app.json new file mode 100644 index 0000000..cb151e1 --- /dev/null +++ b/BookieClient/tsconfig.app.json @@ -0,0 +1,14 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "types": [] + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "src/**/*.spec.ts" + ] +} diff --git a/BookieClient/tsconfig.json b/BookieClient/tsconfig.json new file mode 100644 index 0000000..d2fbb9c --- /dev/null +++ b/BookieClient/tsconfig.json @@ -0,0 +1,31 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "compileOnSave": false, + "compilerOptions": { + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "ES2022", + "module": "preserve" + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true + }, + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/BookieClient/tsconfig.spec.json b/BookieClient/tsconfig.spec.json new file mode 100644 index 0000000..9c8efb9 --- /dev/null +++ b/BookieClient/tsconfig.spec.json @@ -0,0 +1,14 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "types": [ + "vitest/globals" + ] + }, + "include": [ + "src/**/*.d.ts", + "src/**/*.spec.ts" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..ec07d93 --- /dev/null +++ b/README.md @@ -0,0 +1,161 @@ +# Bookie — Football Stats Analyzer + +A full-stack application over the PostgreSQL **`bookie`** schema: + +- **`BookieApi/`** — ASP.NET Core (.NET 10) Web API, layered architecture, EF Core (Npgsql, database-first), JWT auth, Swagger. +- **`BookieClient/`** — Angular 22 (standalone components, signals) + Angular Material, Chart.js, jsPDF. + +The headline feature is the **Pre-Match Report**, a faithful port + extension of the original `report.py` analyzer exposed as a service, an API endpoint, and a rich Angular page. + +--- + +## 1. Architecture + +### Backend (`BookieApi`) — layered + +``` +src/ +├─ Bookie.Domain # POCO entities mirroring the bookie schema +├─ Bookie.Application # DTOs, service interfaces (no persistence deps) +├─ Bookie.Infrastructure # EF Core DbContext, EF configs, service impls, JWT +└─ Bookie.Api # Controllers, Program.cs, Swagger, JWT wiring +``` + +- **DbContext**: `BookieDbContext` maps every table/column explicitly to snake_case names and uses `modelBuilder.HasDefaultSchema("bookie")`. +- **Repository/Service pattern**: each entity has a service (`ILeagueService`, `IMatchService`, …) implemented in Infrastructure; the API depends only on the interfaces. +- **DTOs**: read/create/update DTOs with DataAnnotations validation; server-side paging/sorting/filtering via `PagedQuery` / `PagedResult`. + +### Frontend (`BookieClient`) + +``` +src/app/ +├─ core/ # models, AuthService (signals), HTTP interceptor, guards, ApiService +├─ layout/ # ShellComponent (toolbar + sidenav) +├─ shared/ # confirm dialog +└─ features/ + ├─ auth/ # login page + ├─ dashboard/ # summary widgets + Chart.js status doughnut + ├─ pre-match/ # PRIORITY: Pre-Match Reports page (+ CSV/PDF export) + └─ crud/ # metadata-driven CRUD page + form dialog (all 6 entities) +``` + +--- + +## 2. Prerequisites + +- .NET SDK 10.x +- Node.js 20+ and npm +- Access to the PostgreSQL database that contains the `bookie` schema + +--- + +## 3. Configure & run the backend + +Edit `BookieApi/src/Bookie.Api/appsettings.json`: + +```jsonc +"ConnectionStrings": { + // Same database the report.py script used (DB "modwad", schema "bookie"). + "BookieDb": "Host=YOUR_HOST;Port=5432;Database=modwad;Username=YOUR_USER;Password=YOUR_PASSWORD;Search Path=bookie" +}, +"Jwt": { + "Secret": "replace-with-a-long-random-secret-at-least-32-chars" +}, +"OpenAI": { + // Required only for the AI Match Prediction feature. Model must support structured outputs. + "ApiKey": "sk-...your-key...", + "Model": "gpt-5.6-luna" +} +``` + +> **Tip:** keep secrets out of source control with user-secrets: +> `dotnet user-secrets set "ConnectionStrings:BookieDb" "..."` (run in the `Bookie.Api` project). +> The OpenAI key can be supplied the same way (`dotnet user-secrets set "OpenAI:ApiKey" "sk-..."`) +> or via the `OPENAI_API_KEY` environment variable, which is used automatically when `OpenAI:ApiKey` is blank. + +Run: + +```bash +cd BookieApi +dotnet restore +dotnet run --project src/Bookie.Api --urls http://localhost:5210 +``` + +- Swagger UI: +- The API uses the existing schema as-is (database-first). It does **not** create or migrate tables. + +### Demo accounts (in-memory, configured in `appsettings.json` → `AuthUsers`) + +| Username | Password | Role | +|----------|------------|-------| +| `admin` | `admin123` | admin | +| `user` | `user123` | user | + +`admin` can create/update/delete; `user` has read-only access. (The `bookie` schema has no users table, so auth is a simple configurable in-memory list.) + +--- + +## 4. Run the frontend + +```bash +cd BookieClient +npm install +npm start # ng serve on http://localhost:4200 +``` + +The client points to `http://localhost:5210/api` (see `src/environments/environment.ts`). CORS on the API allows `http://localhost:4200` by default (configurable via `Cors:AllowedOrigins`). + +--- + +## 5. The Pre-Match Report feature + +**Endpoint:** `GET /api/reports/pre-match?date=YYYY-MM-DD` (defaults to today). + +Returns all matches on the date (any status) grouped by **league / country / season**, ordered by country, league name, then kickoff. For **each match**, and for **both teams**, it computes stats using **only matches strictly before that match's `kickoff_at`, within the same season, excluding the match itself** — mirroring the Python `exclude_match_id` + `kickoff_at < before_date` filters exactly: + +- **Season averages** (from `match_team_stats`): possession, shots, shots on target, corners, fouls, offsides (1 dp), yellow/red cards (2 dp). +- **Goals for / against per match** — from `finished` matches only (2 dp). +- **Form** — last 5 finished matches before kickoff, oldest → newest, as `W` / `D` / `L`. (The Python script uses `W`/`R`/`P`; the API normalizes to `W`/`D`/`L` per the DTO contract.) +- **Top 5 scorers** — goals + assists for the team, counted from matches before this one. +- **Graceful empty state**: when a team has no prior matches, `hasHistory=false` and the sub-objects report `hasData=false` (no errors). + +**Efficiency:** rather than 4 queries per team per match (N+1), the service loads all season-scoped matches/stats/goals that could be relevant in a handful of set-based EF Core queries, then applies the exact per-match `before`/`exclude` filter in memory. + +**Angular page** (`/pre-match`): date picker (default today), collapsible league/season sections, per-match cards (kickoff, teams, status badge, score, stadium/referee), two side-by-side team panels (goals, season averages grid, form as colored chips, top-5 scorers table), loading skeletons, empty/error states, and **CSV + PDF export**. + +**Extensions:** + +- **History depth selector** — `?seasonsBack=N` widens the window to include the current season plus up to _N_ previous seasons of the same league; defaults to `0` (current season only). Each match reports the `seasonsIncluded` names. +- **Head-to-head** — `GET /api/reports/head-to-head?teamAId=&teamBId=&beforeMatchId=` returns previous finished meetings between the two teams (with a W/D/W summary and goal aggregate). A **Head-to-head** button on each card opens a dialog; each meeting drills into full match stats. +- **Clickable form chips** — hovering a `W/D/L` chip shows the fixture and score; clicking opens that match's full stats. + +--- + +## 6. AI Match Prediction + +**Endpoint:** `POST /api/predictions/match/{matchId}`. + +The `PredictionService` gathers structured historical data for the fixture — season overall averages, **home/away venue splits**, last-5 recent form with underlying stats, and cross-season **head-to-head** — then sends it to an OpenAI chat model with a dedicated "Football Match Statistics Predictor" system prompt. It uses **structured outputs (JSON schema)** so the response is a typed projection: per-team expected **goals, shots on target, corners, fouls, yellow and red cards** (each a point estimate plus low/high range), a reasoning paragraph, a High/Medium/Low confidence label, and data-quality flags. + +Configure `OpenAI:ApiKey` (or the `OPENAI_API_KEY` env var) and optionally `OpenAI:Model` (default `gpt-5.6-luna`). In the UI, a **Predict** button on each match card opens the projection dialog. + +> These are statistical estimates for analytical purposes only — not guaranteed outcomes, and the feature offers no betting guidance. + +--- + +## 7. Standard features + +- **CRUD** (list with paging/sorting/filtering + create/edit/delete dialogs) for: **leagues, seasons, teams, players, matches, player contracts**. Writes require the `admin` role. +- **Dashboard**: counts of leagues/seasons/teams/players/matches, upcoming matches in the next 7 days, a matches-by-status doughnut chart, and next fixtures. +- **JWT auth** with `admin` / `user` roles, enforced on the API and reflected in the UI (action buttons only for admins). + +--- + +## 8. Assumptions + +- **Database-first without live scaffolding**: entities were written by hand to exactly match `schema_bookie.sql` (no DB connection was available at build time). To re-scaffold instead, run: + `dotnet ef dbcontext scaffold "" Npgsql.EntityFrameworkCore.PostgreSQL --schema bookie --output-dir Entities` from the Infrastructure project. +- **Target framework**: .NET 10 (the current LTS as of this build). +- **Auth users** live in configuration because the schema has no users/roles tables. +- **`updated_at` / timestamps**: the `match` timestamps are `timestamp without time zone`; the API writes them with `Unspecified` kind to satisfy Npgsql. +- The API does not manage `matchday` as a full CRUD resource (not requested); it is exposed as a lookup so matches can be created/edited. diff --git a/sql/match_prediction_openai.sql b/sql/match_prediction_openai.sql new file mode 100644 index 0000000..910604f --- /dev/null +++ b/sql/match_prediction_openai.sql @@ -0,0 +1,139 @@ +-- ===================================================================== +-- OpenAI match predictions + comparison views +-- Run against the "bookie" schema (Postgres). +-- Safe to run multiple times (IF NOT EXISTS / CREATE OR REPLACE). +-- ===================================================================== + +-- --------------------------------------------------------------------- +-- 1) Table: one row PER TEAM PER EXECUTION of the OpenAI predictor. +-- History is kept (no unique constraint) so you can inspect how +-- predictions change across runs; the views below always pick the +-- most recent row per (match, team). +-- --------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS bookie.match_prediction_openai ( + prediction_id SERIAL PRIMARY KEY, + match_id INT NOT NULL REFERENCES bookie.match(match_id), + team_id INT NOT NULL REFERENCES bookie.team(team_id), + + predicted_goals NUMERIC(6,2), + goals_low NUMERIC(6,2), + goals_high NUMERIC(6,2), + + predicted_shots_on_target NUMERIC(6,2), + shots_on_target_low NUMERIC(6,2), + shots_on_target_high NUMERIC(6,2), + + predicted_corners NUMERIC(6,2), + corners_low NUMERIC(6,2), + corners_high NUMERIC(6,2), + + predicted_fouls NUMERIC(6,2), + fouls_low NUMERIC(6,2), + fouls_high NUMERIC(6,2), + + predicted_yellow_cards NUMERIC(6,2), + yellow_cards_low NUMERIC(6,2), + yellow_cards_high NUMERIC(6,2), + + predicted_red_cards NUMERIC(6,2), + red_cards_low NUMERIC(6,2), + red_cards_high NUMERIC(6,2), + + confidence TEXT, + reasoning TEXT, + model TEXT, + predicted_at TIMESTAMP NOT NULL DEFAULT NOW() +); + +CREATE INDEX IF NOT EXISTS idx_match_prediction_openai_match_team + ON bookie.match_prediction_openai (match_id, team_id, predicted_at DESC); + +-- --------------------------------------------------------------------- +-- 2) Latest OpenAI prediction per (match, team). +-- --------------------------------------------------------------------- +CREATE OR REPLACE VIEW bookie.v_match_prediction_openai_latest AS +SELECT DISTINCT ON (match_id, team_id) * +FROM bookie.match_prediction_openai +ORDER BY match_id, team_id, predicted_at DESC; + +-- --------------------------------------------------------------------- +-- 3) Side-by-side comparison: LLM (bookie.match_prediction) vs OpenAI +-- vs ACTUAL, one row per (match, team). Actual goals come from the +-- final score; the other actuals come from bookie.match_team_stats. +-- --------------------------------------------------------------------- +CREATE OR REPLACE VIEW bookie.v_prediction_comparison AS +SELECT + m.match_id, + t.team_id, + t.name AS team_name, + m.kickoff_at, + m.status, + (m.home_team_id = t.team_id) AS is_home, + opp.name AS opponent_name, + + -- goals + lp.predicted_goals AS llm_goals, + op.predicted_goals AS openai_goals, + CASE WHEN m.home_team_id = t.team_id THEN m.home_score_ft ELSE m.away_score_ft END AS actual_goals, + + -- shots on target + lp.predicted_shots_on_target AS llm_shots_on_target, + op.predicted_shots_on_target AS openai_shots_on_target, + mts.shots_on_target AS actual_shots_on_target, + + -- corners + lp.predicted_corners AS llm_corners, + op.predicted_corners AS openai_corners, + mts.corners AS actual_corners, + + -- fouls + lp.predicted_fouls AS llm_fouls, + op.predicted_fouls AS openai_fouls, + mts.fouls AS actual_fouls, + + -- yellow cards + lp.predicted_yellow_cards AS llm_yellow_cards, + op.predicted_yellow_cards AS openai_yellow_cards, + mts.yellow_cards AS actual_yellow_cards, + + op.confidence AS openai_confidence, + op.model AS openai_model +FROM bookie.match m +JOIN bookie.team t + ON t.team_id IN (m.home_team_id, m.away_team_id) +JOIN bookie.team opp + ON opp.team_id = CASE WHEN m.home_team_id = t.team_id THEN m.away_team_id ELSE m.home_team_id END +LEFT JOIN bookie.match_prediction lp + ON lp.match_id = m.match_id AND lp.team_id = t.team_id +LEFT JOIN bookie.v_match_prediction_openai_latest op + ON op.match_id = m.match_id AND op.team_id = t.team_id +LEFT JOIN bookie.match_team_stats mts + ON mts.match_id = m.match_id AND mts.team_id = t.team_id +WHERE lp.prediction_id IS NOT NULL OR op.prediction_id IS NOT NULL; + +-- --------------------------------------------------------------------- +-- 4) Accuracy summary: mean absolute error of each model vs actual, +-- per metric, over finished matches only. Lower = better. +-- --------------------------------------------------------------------- +CREATE OR REPLACE VIEW bookie.v_prediction_accuracy AS +WITH c AS ( + SELECT * FROM bookie.v_prediction_comparison WHERE status = 'finished' +) +SELECT metric, + ROUND(AVG(ABS(llm_pred - actual)), 3) AS llm_mae, + ROUND(AVG(ABS(openai_pred - actual)), 3) AS openai_mae, + COUNT(*) FILTER (WHERE llm_pred IS NOT NULL AND actual IS NOT NULL) AS llm_samples, + COUNT(*) FILTER (WHERE openai_pred IS NOT NULL AND actual IS NOT NULL) AS openai_samples +FROM ( + SELECT 'goals' AS metric, llm_goals AS llm_pred, openai_goals AS openai_pred, actual_goals AS actual FROM c + UNION ALL + SELECT 'shots_on_target', llm_shots_on_target, openai_shots_on_target, actual_shots_on_target FROM c + UNION ALL + SELECT 'corners', llm_corners, openai_corners, actual_corners FROM c + UNION ALL + SELECT 'fouls', llm_fouls, openai_fouls, actual_fouls FROM c + UNION ALL + SELECT 'yellow_cards', llm_yellow_cards, openai_yellow_cards, actual_yellow_cards FROM c +) x +GROUP BY metric +ORDER BY metric; diff --git a/sql/model_and_odds_views.sql b/sql/model_and_odds_views.sql new file mode 100644 index 0000000..d5f7fb0 --- /dev/null +++ b/sql/model_and_odds_views.sql @@ -0,0 +1,227 @@ +-- ===================================================================== +-- Inspection views for Dixon-Coles model + betting odds tables (bookie) +-- Assumes tables already exist. Safe to re-run (CREATE OR REPLACE). +-- +-- psql -U -d -f sql/model_and_odds_views.sql +-- ===================================================================== + +-- Predictions with match & team context +CREATE OR REPLACE VIEW bookie.v_match_prediction_detail AS +SELECT + mp.prediction_id, + mp.match_id, + m.kickoff_at, + m.status, + ht.name AS home_team, + at.name AS away_team, + l.name AS league, + l.country, + t.name AS team_name, + (m.home_team_id = t.team_id) AS is_home, + mp.predicted_goals, + mp.predicted_shots_total, + mp.predicted_shots_on_target, + mp.predicted_corners, + mp.predicted_fouls, + mp.predicted_yellow_cards, + mp.model_trained_at, + mp.half_life_days, + mp.predicted_at +FROM bookie.match_prediction mp +JOIN bookie.match m ON m.match_id = mp.match_id +JOIN bookie.team t ON t.team_id = mp.team_id +JOIN bookie.team ht ON ht.team_id = m.home_team_id +JOIN bookie.team at ON at.team_id = m.away_team_id +JOIN bookie.matchday md ON md.matchday_id = m.matchday_id +JOIN bookie.season s ON s.season_id = md.season_id +JOIN bookie.league l ON l.league_id = s.league_id +ORDER BY m.kickoff_at DESC, mp.match_id, is_home DESC; + +-- League Dixon-Coles parameters +CREATE OR REPLACE VIEW bookie.v_league_model_param_detail AS +SELECT + l.league_id, + l.name AS league_name, + l.country, + l.tier_level, + p.home_advantage, + p.rho, + p.avg_home_goals, + p.avg_away_goals, + p.matches_used, + p.half_life_days, + p.trained_at, + (SELECT COUNT(*) FROM bookie.team_strength ts WHERE ts.league_id = l.league_id) AS team_strength_count +FROM bookie.league l +LEFT JOIN bookie.league_model_param p ON p.league_id = l.league_id +ORDER BY l.country, l.name; + +-- Team attack/defense with readable multipliers +CREATE OR REPLACE VIEW bookie.v_team_strength_detail AS +SELECT + ts.team_strength_id, + ts.team_id, + t.name AS team_name, + ts.league_id, + l.name AS league_name, + l.country, + ts.log_attack, + ts.log_defense, + ROUND(EXP(ts.log_attack)::numeric, 4) AS attack_factor, + ROUND(EXP(ts.log_defense)::numeric, 4) AS defense_factor, + ts.matches_used, + ts.trained_at +FROM bookie.team_strength ts +JOIN bookie.team t ON t.team_id = ts.team_id +JOIN bookie.league l ON l.league_id = ts.league_id +ORDER BY l.country, l.name, attack_factor DESC; + +-- 1X2 odds per bookmaker with match context +CREATE OR REPLACE VIEW bookie.v_match_odds_detail AS +SELECT + mo.match_odds_id, + mo.match_id, + m.kickoff_at, + m.status, + ht.name AS home_team, + at.name AS away_team, + l.name AS league, + mo.bookmaker, + mo.home_odds, + mo.draw_odds, + mo.away_odds, + ROUND((1 / mo.home_odds)::numeric, 4) AS home_implied, + ROUND((1 / mo.draw_odds)::numeric, 4) AS draw_implied, + ROUND((1 / mo.away_odds)::numeric, 4) AS away_implied, + mo.total_line, + mo.over_odds, + mo.under_odds, + CASE WHEN mo.over_odds IS NOT NULL THEN ROUND((1 / mo.over_odds)::numeric, 4) END AS over_implied, + CASE WHEN mo.under_odds IS NOT NULL THEN ROUND((1 / mo.under_odds)::numeric, 4) END AS under_implied, + mo.fetched_at +FROM bookie.match_odds mo +JOIN bookie.match m ON m.match_id = mo.match_id +JOIN bookie.team ht ON ht.team_id = m.home_team_id +JOIN bookie.team at ON at.team_id = m.away_team_id +JOIN bookie.matchday md ON md.matchday_id = m.matchday_id +JOIN bookie.season s ON s.season_id = md.season_id +JOIN bookie.league l ON l.league_id = s.league_id +ORDER BY m.kickoff_at DESC, mo.match_id, mo.bookmaker; + +-- Averaged 1X2 odds per match (what predict uses for market blending) +CREATE OR REPLACE VIEW bookie.v_match_odds_consensus AS +SELECT + mo.match_id, + m.kickoff_at, + m.status, + ht.name AS home_team, + at.name AS away_team, + l.name AS league, + COUNT(*) AS bookmaker_count, + ROUND(AVG(mo.home_odds)::numeric, 3) AS avg_home_odds, + ROUND(AVG(mo.draw_odds)::numeric, 3) AS avg_draw_odds, + ROUND(AVG(mo.away_odds)::numeric, 3) AS avg_away_odds, + ROUND((1 / AVG(mo.home_odds))::numeric, 4) AS home_implied, + ROUND((1 / AVG(mo.draw_odds))::numeric, 4) AS draw_implied, + ROUND((1 / AVG(mo.away_odds))::numeric, 4) AS away_implied, + ROUND(AVG(mo.total_line)::numeric, 2) AS avg_total_line, + ROUND(AVG(mo.over_odds)::numeric, 3) AS avg_over_odds, + ROUND(AVG(mo.under_odds)::numeric, 3) AS avg_under_odds, + CASE WHEN AVG(mo.over_odds) IS NOT NULL + THEN ROUND((1 / AVG(mo.over_odds))::numeric, 4) END AS over_implied, + CASE WHEN AVG(mo.under_odds) IS NOT NULL + THEN ROUND((1 / AVG(mo.under_odds))::numeric, 4) END AS under_implied, + COUNT(mo.total_line) AS totals_bookmaker_count, + MAX(mo.fetched_at) AS latest_fetched_at +FROM bookie.match_odds mo +JOIN bookie.match m ON m.match_id = mo.match_id +JOIN bookie.team ht ON ht.team_id = m.home_team_id +JOIN bookie.team at ON at.team_id = m.away_team_id +JOIN bookie.matchday md ON md.matchday_id = m.matchday_id +JOIN bookie.season s ON s.season_id = md.season_id +JOIN bookie.league l ON l.league_id = s.league_id +GROUP BY mo.match_id, m.kickoff_at, m.status, ht.name, at.name, l.name +ORDER BY m.kickoff_at DESC; + +-- Team name aliases for odds API matching +CREATE OR REPLACE VIEW bookie.v_team_odds_alias_detail AS +SELECT + a.team_id, + t.name AS team_name, + a.odds_api_name, + (a.odds_api_name = t.name) AS exact_name_match +FROM bookie.team_odds_alias a +JOIN bookie.team t ON t.team_id = a.team_id +ORDER BY t.name; + +-- Extra markets (corners/cards O/U) +CREATE OR REPLACE VIEW bookie.v_match_extra_odds_detail AS +SELECT + eo.match_extra_odds_id, + eo.match_id, + m.kickoff_at, + ht.name AS home_team, + at.name AS away_team, + eo.market, + eo.bookmaker, + eo.line, + eo.over_odds, + eo.under_odds, + eo.fetched_at +FROM bookie.match_extra_odds eo +JOIN bookie.match m ON m.match_id = eo.match_id +JOIN bookie.team ht ON ht.team_id = m.home_team_id +JOIN bookie.team at ON at.team_id = m.away_team_id +ORDER BY m.kickoff_at DESC, eo.match_id, eo.market, eo.bookmaker; + +-- One-row-per-match snapshot for pre-match review (model + odds + prediction coverage) +CREATE OR REPLACE VIEW bookie.v_prematch_model_snapshot AS +SELECT + m.match_id, + m.kickoff_at, + m.status, + ht.name AS home_team, + at.name AS away_team, + l.league_id, + l.name AS league, + l.country, + s.name AS season, + lmp.home_advantage, + lmp.rho, + lmp.avg_home_goals, + lmp.avg_away_goals, + lmp.matches_used AS model_matches_used, + lmp.trained_at AS model_trained_at, + hs.log_attack AS home_log_attack, + hs.log_defense AS home_log_defense, + aws.log_attack AS away_log_attack, + aws.log_defense AS away_log_defense, + oc.bookmaker_count, + oc.avg_home_odds, + oc.avg_draw_odds, + oc.avg_away_odds, + oc.home_implied, + oc.draw_implied, + oc.away_implied, + oc.avg_total_line, + oc.avg_over_odds, + oc.avg_under_odds, + oc.over_implied, + oc.under_implied, + hp.predicted_goals AS home_pred_goals, + ap.predicted_goals AS away_pred_goals, + hp.predicted_at AS home_predicted_at, + ap.predicted_at AS away_predicted_at +FROM bookie.match m +JOIN bookie.team ht ON ht.team_id = m.home_team_id +JOIN bookie.team at ON at.team_id = m.away_team_id +JOIN bookie.matchday md ON md.matchday_id = m.matchday_id +JOIN bookie.season s ON s.season_id = md.season_id +JOIN bookie.league l ON l.league_id = s.league_id +LEFT JOIN bookie.league_model_param lmp ON lmp.league_id = l.league_id +LEFT JOIN bookie.team_strength hs ON hs.team_id = m.home_team_id AND hs.league_id = l.league_id +LEFT JOIN bookie.team_strength aws ON aws.team_id = m.away_team_id AND aws.league_id = l.league_id +LEFT JOIN bookie.v_match_odds_consensus oc ON oc.match_id = m.match_id +LEFT JOIN bookie.match_prediction hp ON hp.match_id = m.match_id AND hp.team_id = m.home_team_id +LEFT JOIN bookie.match_prediction ap ON ap.match_id = m.match_id AND ap.team_id = m.away_team_id +ORDER BY m.kickoff_at DESC;