From 453db50e40bc2e1342ca1679670e8f3f0a9ac383 Mon Sep 17 00:00:00 2001 From: furiax Date: Wed, 22 Jan 2025 20:49:07 +0100 Subject: [PATCH 01/14] Start project by creating the context file --- ExternalAPI.Furiax/ExternalAPI.Furiax.sln | 22 ++++++++++ .../FormulaOneServer/Data/FormulaDbContext.cs | 9 ++++ .../FormulaOneServer/FormulaOneServer.csproj | 23 +++++++++++ .../FormulaOneServer/FormulaOneServer.http | 6 +++ .../FormulaOneServer/Program.cs | 21 ++++++++++ .../Properties/launchSettings.json | 41 +++++++++++++++++++ .../appsettings.Development.json | 8 ++++ .../FormulaOneServer/appsettings.json | 9 ++++ tailwind.extension.json | 21 ++++++++++ 9 files changed, 160 insertions(+) create mode 100644 ExternalAPI.Furiax/ExternalAPI.Furiax.sln create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs create mode 100644 ExternalAPI.Furiax/FormulaOneServer/FormulaOneServer.csproj create mode 100644 ExternalAPI.Furiax/FormulaOneServer/FormulaOneServer.http create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Program.cs create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Properties/launchSettings.json create mode 100644 ExternalAPI.Furiax/FormulaOneServer/appsettings.Development.json create mode 100644 ExternalAPI.Furiax/FormulaOneServer/appsettings.json create mode 100644 tailwind.extension.json diff --git a/ExternalAPI.Furiax/ExternalAPI.Furiax.sln b/ExternalAPI.Furiax/ExternalAPI.Furiax.sln new file mode 100644 index 0000000..a2aa0f4 --- /dev/null +++ b/ExternalAPI.Furiax/ExternalAPI.Furiax.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.12.35707.178 d17.12 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormulaOneServer", "FormulaOneServer\FormulaOneServer.csproj", "{DDC111E3-B359-4008-B827-9146F185389A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DDC111E3-B359-4008-B827-9146F185389A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DDC111E3-B359-4008-B827-9146F185389A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DDC111E3-B359-4008-B827-9146F185389A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DDC111E3-B359-4008-B827-9146F185389A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs b/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs new file mode 100644 index 0000000..6e42812 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs @@ -0,0 +1,9 @@ +using Microsoft.EntityFrameworkCore; + +public class FormulaDbContext : DbContext +{ + public FormulaDbContext(DbContextOptions options) : base(options) + { + + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/FormulaOneServer.csproj b/ExternalAPI.Furiax/FormulaOneServer/FormulaOneServer.csproj new file mode 100644 index 0000000..940aec7 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/FormulaOneServer.csproj @@ -0,0 +1,23 @@ + + + + net8.0 + enable + enable + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + diff --git a/ExternalAPI.Furiax/FormulaOneServer/FormulaOneServer.http b/ExternalAPI.Furiax/FormulaOneServer/FormulaOneServer.http new file mode 100644 index 0000000..d5cb133 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/FormulaOneServer.http @@ -0,0 +1,6 @@ +@FormulaOneServer_HostAddress = http://localhost:5297 + +GET {{FormulaOneServer_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/ExternalAPI.Furiax/FormulaOneServer/Program.cs b/ExternalAPI.Furiax/FormulaOneServer/Program.cs new file mode 100644 index 0000000..919fc4a --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Program.cs @@ -0,0 +1,21 @@ +using Microsoft.EntityFrameworkCore; + +var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); +builder.Services.AddControllers(); + +builder.Services.AddDbContext(opt => opt.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection"))); + +var app = builder.Build(); + +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.MapControllers(); + +app.Run(); \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaOneServer/Properties/launchSettings.json b/ExternalAPI.Furiax/FormulaOneServer/Properties/launchSettings.json new file mode 100644 index 0000000..cb5eecf --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:16194", + "sslPort": 44363 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5297", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7215;http://localhost:5297", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/appsettings.Development.json b/ExternalAPI.Furiax/FormulaOneServer/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/appsettings.json b/ExternalAPI.Furiax/FormulaOneServer/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/tailwind.extension.json b/tailwind.extension.json new file mode 100644 index 0000000..501542a --- /dev/null +++ b/tailwind.extension.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://raw.githubusercontent.com/theron-wang/VS2022-Editor-Support-for-Tailwind-CSS/refs/heads/main/tailwind.extension.schema.json", + "ConfigurationFile": "Kmakai.React.ExternalAPI\\tailwind.config.js", + "BuildFiles": [], + "PackageConfigurationFile": "", + "CustomRegexes": { + "Razor": { + "Override": false, + "Values": [] + }, + "HTML": { + "Override": false, + "Values": [] + }, + "JavaScript": { + "Override": false, + "Values": [] + } + }, + "UseCli": false +} \ No newline at end of file From 9512fdc2ea1aa97abdd61ae5061ec1b309480881 Mon Sep 17 00:00:00 2001 From: furiax Date: Wed, 22 Jan 2025 21:00:13 +0100 Subject: [PATCH 02/14] created the Driver model --- .../FormulaOneServer/Data/FormulaDbContext.cs | 2 ++ ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs | 11 +++++++++++ ExternalAPI.Furiax/FormulaOneServer/Program.cs | 1 + 3 files changed, 14 insertions(+) create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs diff --git a/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs b/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs index 6e42812..50c666b 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs @@ -1,9 +1,11 @@ using Microsoft.EntityFrameworkCore; +namespace FormulaOneServer.Data; public class FormulaDbContext : DbContext { public FormulaDbContext(DbContextOptions options) : base(options) { } + public DbSet Drivers { get; set; } } diff --git a/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs b/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs new file mode 100644 index 0000000..f3933ea --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs @@ -0,0 +1,11 @@ +namespace FormulaOneServer.Models +{ + public class Driver + { + public int DriverNumber { get; set; } + public string DriverName { get; set; } + public string DriverImageLink { get; set; } + public string Team { get; set; } + public string CarImageLink { get; set; } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Program.cs b/ExternalAPI.Furiax/FormulaOneServer/Program.cs index 919fc4a..b4a01ee 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Program.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Program.cs @@ -1,3 +1,4 @@ +using FormulaOneServer.Data; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); From 3a2804902712fc7ee3c84e82564336410937433d Mon Sep 17 00:00:00 2001 From: furiax Date: Wed, 22 Jan 2025 21:05:35 +0100 Subject: [PATCH 03/14] created database with add-migration and update-database commands --- .../FormulaOneServer/Data/FormulaDbContext.cs | 3 +- .../FormulaOneServer/Formula.db | Bin 0 -> 24576 bytes .../20250122200341_InitialCreate.Designer.cs | 51 ++++++++++++++++++ .../20250122200341_InitialCreate.cs | 37 +++++++++++++ .../FormulaDbContextModelSnapshot.cs | 48 +++++++++++++++++ .../FormulaOneServer/Models/Driver.cs | 5 +- .../FormulaOneServer/appsettings.json | 3 ++ 7 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Formula.db create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122200341_InitialCreate.Designer.cs create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122200341_InitialCreate.cs create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs diff --git a/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs b/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs index 50c666b..7c29bb9 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs @@ -1,4 +1,5 @@ -using Microsoft.EntityFrameworkCore; +using FormulaOneServer.Models; +using Microsoft.EntityFrameworkCore; namespace FormulaOneServer.Data; public class FormulaDbContext : DbContext diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db b/ExternalAPI.Furiax/FormulaOneServer/Formula.db new file mode 100644 index 0000000000000000000000000000000000000000..4338bbc67927002809a18c6b520b731374255de0 GIT binary patch literal 24576 zcmeI&J#X4T7zgk(1ZYu!s0%}eo~#au2*@^xpizgq)NQR8Ly1#`p|TvfMpiH`##DWo zLO)EuQ>U)|2;F+7kOTs0R;2$4%jbu?$LF7Kc@W2M4L4-;gCBTKNXul4#A4(*rG$_e zKa%{IwK(r=%r5v@xY1wLjgivVK_<6P5}Q9r?pZdQ{k{2zchMjK0SG_<0uX=z1Rwwb z2&@ulCX)F=L1>50S&t0|JzlfeLpB((erNGAS!-#krBO?LVQ6$=>`veD*dCv`JASm0 z%5QHA-@i?Az6{(?EErBtiMbr&G%C`aOq%jG4VWYEj0GaqO-p;NwW!&!sCi--wAL_> zt(MB;RBRsESJRs7Zklp_fbKcx%y9b` zD@Iw&@m73QbAnZ~GwI#S(^x8BsR-l71jV+sS9SM1a6;Gb58t@M&=0;W4aVoemX5jR zyUM9|7nZq5w<6IE$eBzt@Vlc<_>R9szSxDd{L%DyGXK6J5VzlDpQpRR8HN7j+Fp7e zTV5KDYTyUaM!i&pR9=>aadC;3;dd_Pr$>?4T~5(}Yoy5Le>>~;4Me)c#&SJ23?1*| zZI(>*AX|jwenuTM2tWV=5P$##AOHafKmY;|fB*#6OW=tRCk;hX4vLaoR1~U6hf?|Q zpjxU_M+^&`OS|Nm?HcvvdFYBn*K71Rwwb2tWV= P5P$##AOHafthvBnYQ8Qx literal 0 HcmV?d00001 diff --git a/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122200341_InitialCreate.Designer.cs b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122200341_InitialCreate.Designer.cs new file mode 100644 index 0000000..9688f62 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122200341_InitialCreate.Designer.cs @@ -0,0 +1,51 @@ +// +using FormulaOneServer.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace FormulaOneServer.Migrations +{ + [DbContext(typeof(FormulaDbContext))] + [Migration("20250122200341_InitialCreate")] + partial class InitialCreate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.1"); + + modelBuilder.Entity("FormulaOneServer.Models.Driver", b => + { + b.Property("DriverNumber") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CarImageLink") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverImageLink") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Team") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("DriverNumber"); + + b.ToTable("Drivers"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122200341_InitialCreate.cs b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122200341_InitialCreate.cs new file mode 100644 index 0000000..483b0a5 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122200341_InitialCreate.cs @@ -0,0 +1,37 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace FormulaOneServer.Migrations +{ + /// + public partial class InitialCreate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Drivers", + columns: table => new + { + DriverNumber = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + DriverName = table.Column(type: "TEXT", nullable: false), + DriverImageLink = table.Column(type: "TEXT", nullable: false), + Team = table.Column(type: "TEXT", nullable: false), + CarImageLink = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Drivers", x => x.DriverNumber); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Drivers"); + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs b/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs new file mode 100644 index 0000000..7985292 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs @@ -0,0 +1,48 @@ +// +using FormulaOneServer.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace FormulaOneServer.Migrations +{ + [DbContext(typeof(FormulaDbContext))] + partial class FormulaDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.1"); + + modelBuilder.Entity("FormulaOneServer.Models.Driver", b => + { + b.Property("DriverNumber") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CarImageLink") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverImageLink") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Team") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("DriverNumber"); + + b.ToTable("Drivers"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs b/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs index f3933ea..aa11d7c 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs @@ -1,7 +1,10 @@ -namespace FormulaOneServer.Models +using System.ComponentModel.DataAnnotations; + +namespace FormulaOneServer.Models { public class Driver { + [Key] public int DriverNumber { get; set; } public string DriverName { get; set; } public string DriverImageLink { get; set; } diff --git a/ExternalAPI.Furiax/FormulaOneServer/appsettings.json b/ExternalAPI.Furiax/FormulaOneServer/appsettings.json index 10f68b8..6fa1fb8 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/appsettings.json +++ b/ExternalAPI.Furiax/FormulaOneServer/appsettings.json @@ -1,4 +1,7 @@ { + "ConnectionStrings": { + "DefaultConnection": "Data Source =Formula.db" + }, "Logging": { "LogLevel": { "Default": "Information", From cb93765485eee1b52d381ae9985a89ce06e5bcd9 Mon Sep 17 00:00:00 2001 From: furiax Date: Wed, 22 Jan 2025 21:27:51 +0100 Subject: [PATCH 04/14] Created the service interface and page --- .../FormulaOneServer/Formula.db | Bin 24576 -> 28672 bytes .../20250122201840_AddedId.Designer.cs | 54 ++++++++++++++ .../Migrations/20250122201840_AddedId.cs | 66 ++++++++++++++++++ .../FormulaDbContextModelSnapshot.cs | 7 +- .../FormulaOneServer/Models/Driver.cs | 2 +- .../FormulaOneServer/Program.cs | 3 +- .../Services/FormulaService.cs | 56 +++++++++++++++ .../Services/IFormulaService.cs | 14 ++++ 8 files changed, 198 insertions(+), 4 deletions(-) create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122201840_AddedId.Designer.cs create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122201840_AddedId.cs create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Services/FormulaService.cs create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Services/IFormulaService.cs diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db b/ExternalAPI.Furiax/FormulaOneServer/Formula.db index 4338bbc67927002809a18c6b520b731374255de0..20f04eb5e084b65c2137e4f1976ffb608fccb550 100644 GIT binary patch delta 472 zcmZoTz}WDBae}lUGXnzyI}o!1F(ZgQQO8)4nL)3rkeBBt11onK1HTO)AKy!!<=kal z8XFroaC$env9XJ5YcsYumn0_Tq^73Dm!#$v#Jdz_mZcUIqjA}tgIpa$TopnboqSvs zl+a`+PvF;^oWiR$`2(-?gSlh^aA0WsU;DZGl4ZFnUdb$GcHfIulEH8EF7A;dKz zM4`zJYP~VU`X)UfUs{^61;U3q14^+^7Uz|pJd0lipDjR}rI~rTG$$|T31ZSecmX8Jd|InVFbs8yHv_81MomnfP}x@ZaL!wOLSL z9lwGc6SJkbk%5t^fuWI+k%6Iwi9x($N=j;qXNsksfu7;yTl!iYO#DX~_#f~e1!~#J zFD=Dv$%tJC)8q&C3Y!HT-t$kKAUG+2g^iK_3j_ZbpvWVB5g|rqZ4O{)axpSXb3i@2 H$Uy)A?z4c* delta 152 zcmZp8z}Rqrae}lU69WSS8xX?)^F$qEaV7@6szP3V69!hES{NA^X&V?=85r;a wO=jf3#lU}SGo!-={>iuWwb&T>A29Gg0P?T#PkvypuqZ)bQUJ?lmV`h20E#FjCjbBd diff --git a/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122201840_AddedId.Designer.cs b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122201840_AddedId.Designer.cs new file mode 100644 index 0000000..e0f14d4 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122201840_AddedId.Designer.cs @@ -0,0 +1,54 @@ +// +using FormulaOneServer.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace FormulaOneServer.Migrations +{ + [DbContext(typeof(FormulaDbContext))] + [Migration("20250122201840_AddedId")] + partial class AddedId + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.1"); + + modelBuilder.Entity("FormulaOneServer.Models.Driver", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CarImageLink") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverImageLink") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverNumber") + .HasColumnType("INTEGER"); + + b.Property("Team") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Drivers"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122201840_AddedId.cs b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122201840_AddedId.cs new file mode 100644 index 0000000..b2522ae --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250122201840_AddedId.cs @@ -0,0 +1,66 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace FormulaOneServer.Migrations +{ + /// + public partial class AddedId : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropPrimaryKey( + name: "PK_Drivers", + table: "Drivers"); + + migrationBuilder.AlterColumn( + name: "DriverNumber", + table: "Drivers", + type: "INTEGER", + nullable: false, + oldClrType: typeof(int), + oldType: "INTEGER") + .OldAnnotation("Sqlite:Autoincrement", true); + + migrationBuilder.AddColumn( + name: "Id", + table: "Drivers", + type: "INTEGER", + nullable: false, + defaultValue: 0) + .Annotation("Sqlite:Autoincrement", true); + + migrationBuilder.AddPrimaryKey( + name: "PK_Drivers", + table: "Drivers", + column: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropPrimaryKey( + name: "PK_Drivers", + table: "Drivers"); + + migrationBuilder.DropColumn( + name: "Id", + table: "Drivers"); + + migrationBuilder.AlterColumn( + name: "DriverNumber", + table: "Drivers", + type: "INTEGER", + nullable: false, + oldClrType: typeof(int), + oldType: "INTEGER") + .Annotation("Sqlite:Autoincrement", true); + + migrationBuilder.AddPrimaryKey( + name: "PK_Drivers", + table: "Drivers", + column: "DriverNumber"); + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs b/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs index 7985292..ae24021 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs @@ -18,7 +18,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("FormulaOneServer.Models.Driver", b => { - b.Property("DriverNumber") + b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); @@ -34,11 +34,14 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("TEXT"); + b.Property("DriverNumber") + .HasColumnType("INTEGER"); + b.Property("Team") .IsRequired() .HasColumnType("TEXT"); - b.HasKey("DriverNumber"); + b.HasKey("Id"); b.ToTable("Drivers"); }); diff --git a/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs b/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs index aa11d7c..919ec28 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Models/Driver.cs @@ -4,7 +4,7 @@ namespace FormulaOneServer.Models { public class Driver { - [Key] + public int Id { get; set; } public int DriverNumber { get; set; } public string DriverName { get; set; } public string DriverImageLink { get; set; } diff --git a/ExternalAPI.Furiax/FormulaOneServer/Program.cs b/ExternalAPI.Furiax/FormulaOneServer/Program.cs index b4a01ee..31d3464 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Program.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Program.cs @@ -1,4 +1,5 @@ using FormulaOneServer.Data; +using FormulaOneServer.Services; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); @@ -6,8 +7,8 @@ builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddControllers(); - builder.Services.AddDbContext(opt => opt.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection"))); +builder.Services.AddScoped(); var app = builder.Build(); diff --git a/ExternalAPI.Furiax/FormulaOneServer/Services/FormulaService.cs b/ExternalAPI.Furiax/FormulaOneServer/Services/FormulaService.cs new file mode 100644 index 0000000..86370a7 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Services/FormulaService.cs @@ -0,0 +1,56 @@ +using FormulaOneServer.Data; +using FormulaOneServer.Models; + +namespace FormulaOneServer.Services +{ + public class FormulaService : IFormulaService + { + private readonly FormulaDbContext _dbContext; + + public FormulaService(FormulaDbContext dbContext) + { + _dbContext = dbContext; + } + + public Driver AddDriver(Driver driver) + { + var newDriver = _dbContext.Drivers.Add(driver); + _dbContext.SaveChanges(); + return newDriver.Entity; + } + + public string? DeleteDriver(int id) + { + Driver deletedDriver = _dbContext.Drivers.Find(id); + if (deletedDriver == null) + { + return null; + } + _dbContext.Drivers.Remove(deletedDriver); + return $"Successfully deleted driver with id: {id}"; + } + + public List GetAllDrivers() + { + return _dbContext.Drivers.ToList(); + } + + public Driver? GetDriverByNumber(int id) + { + Driver getDriver = _dbContext.Drivers.Find(id); + return getDriver == null ? null : getDriver; + } + + public Driver UpdateDriver(Driver driver) + { + Driver updatedDriver = _dbContext.Drivers.Find(driver.Id); + if (updatedDriver == null) + { + return null; + } + _dbContext.Entry(updatedDriver).CurrentValues.SetValues(driver); + _dbContext.SaveChanges() ; + return updatedDriver; + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Services/IFormulaService.cs b/ExternalAPI.Furiax/FormulaOneServer/Services/IFormulaService.cs new file mode 100644 index 0000000..b9c6fa6 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Services/IFormulaService.cs @@ -0,0 +1,14 @@ +using FormulaOneServer.Models; + +namespace FormulaOneServer.Services +{ + public interface IFormulaService + { + public List GetAllDrivers(); + public Driver? GetDriverByNumber(int id); + public Driver AddDriver(Driver driver); + public Driver UpdateDriver(Driver driver); + public string? DeleteDriver(int id); + } +} + From 15e8705f599d31a90a73ffefa50201775c6bf313 Mon Sep 17 00:00:00 2001 From: furiax Date: Wed, 22 Jan 2025 21:43:05 +0100 Subject: [PATCH 05/14] created controller --- .../Controllers/FormulaController.cs | 58 ++++++++++++++ .../Services/FormulaService.cs | 79 +++++++++---------- .../Services/IFormulaService.cs | 17 ++-- 3 files changed, 105 insertions(+), 49 deletions(-) create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Controllers/FormulaController.cs diff --git a/ExternalAPI.Furiax/FormulaOneServer/Controllers/FormulaController.cs b/ExternalAPI.Furiax/FormulaOneServer/Controllers/FormulaController.cs new file mode 100644 index 0000000..b51632d --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Controllers/FormulaController.cs @@ -0,0 +1,58 @@ +using FormulaOneServer.Models; +using FormulaOneServer.Services; +using Microsoft.AspNetCore.Mvc; + +namespace FormulaOneServer.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class FormulaController : ControllerBase +{ + private readonly IFormulaService _service; + + public FormulaController(IFormulaService service) + { + _service = service; + } + [HttpGet] + public ActionResult> GetAllDrivers() + { + return Ok(_service.GetAllDrivers()); + } + [HttpGet("{id}")] + public ActionResult GetDriver(int id) + { + var result = _service.GetDriverById(id); + if (result == null) + { + return NotFound(); + } + + return Ok(result); + } + [HttpPost] + public ActionResult AddDriver(Driver driver) + { + return Ok(_service.AddDriver(driver)); + } + [HttpPut] + public ActionResult UpdateDriver(Driver driver) + { + var result = (_service.UpdateDriver(driver)); + if (result == null) + { + return NotFound(); + } + return Ok(result); + } + [HttpDelete("{id}")] + public ActionResult DeleteDriver(int id) + { + var result = _service.DeleteDriver(id); + if (result == null) + { + return NotFound(); + } + return Ok(result); + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Services/FormulaService.cs b/ExternalAPI.Furiax/FormulaOneServer/Services/FormulaService.cs index 86370a7..f95eeb8 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Services/FormulaService.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Services/FormulaService.cs @@ -1,56 +1,55 @@ using FormulaOneServer.Data; using FormulaOneServer.Models; -namespace FormulaOneServer.Services +namespace FormulaOneServer.Services; + +public class FormulaService : IFormulaService { - public class FormulaService : IFormulaService - { - private readonly FormulaDbContext _dbContext; + private readonly FormulaDbContext _dbContext; - public FormulaService(FormulaDbContext dbContext) - { - _dbContext = dbContext; - } + public FormulaService(FormulaDbContext dbContext) + { + _dbContext = dbContext; + } - public Driver AddDriver(Driver driver) - { - var newDriver = _dbContext.Drivers.Add(driver); - _dbContext.SaveChanges(); - return newDriver.Entity; - } + public Driver AddDriver(Driver driver) + { + var newDriver = _dbContext.Drivers.Add(driver); + _dbContext.SaveChanges(); + return newDriver.Entity; + } - public string? DeleteDriver(int id) + public string? DeleteDriver(int id) + { + Driver deletedDriver = _dbContext.Drivers.Find(id); + if (deletedDriver == null) { - Driver deletedDriver = _dbContext.Drivers.Find(id); - if (deletedDriver == null) - { - return null; - } - _dbContext.Drivers.Remove(deletedDriver); - return $"Successfully deleted driver with id: {id}"; + return null; } + _dbContext.Drivers.Remove(deletedDriver); + return $"Successfully deleted driver with id: {id}"; + } - public List GetAllDrivers() - { - return _dbContext.Drivers.ToList(); - } + public List GetAllDrivers() + { + return _dbContext.Drivers.ToList(); + } - public Driver? GetDriverByNumber(int id) - { - Driver getDriver = _dbContext.Drivers.Find(id); - return getDriver == null ? null : getDriver; - } + public Driver? GetDriverById(int id) + { + Driver getDriver = _dbContext.Drivers.Find(id); + return getDriver == null ? null : getDriver; + } - public Driver UpdateDriver(Driver driver) + public Driver UpdateDriver(Driver driver) + { + Driver updatedDriver = _dbContext.Drivers.Find(driver.Id); + if (updatedDriver == null) { - Driver updatedDriver = _dbContext.Drivers.Find(driver.Id); - if (updatedDriver == null) - { - return null; - } - _dbContext.Entry(updatedDriver).CurrentValues.SetValues(driver); - _dbContext.SaveChanges() ; - return updatedDriver; + return null; } + _dbContext.Entry(updatedDriver).CurrentValues.SetValues(driver); + _dbContext.SaveChanges() ; + return updatedDriver; } } diff --git a/ExternalAPI.Furiax/FormulaOneServer/Services/IFormulaService.cs b/ExternalAPI.Furiax/FormulaOneServer/Services/IFormulaService.cs index b9c6fa6..ff0a7d8 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Services/IFormulaService.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Services/IFormulaService.cs @@ -1,14 +1,13 @@ using FormulaOneServer.Models; -namespace FormulaOneServer.Services +namespace FormulaOneServer.Services; + +public interface IFormulaService { - public interface IFormulaService - { - public List GetAllDrivers(); - public Driver? GetDriverByNumber(int id); - public Driver AddDriver(Driver driver); - public Driver UpdateDriver(Driver driver); - public string? DeleteDriver(int id); - } + public List GetAllDrivers(); + public Driver? GetDriverById(int id); + public Driver AddDriver(Driver driver); + public Driver UpdateDriver(Driver driver); + public string? DeleteDriver(int id); } From e8770b71945d8a652a461d6fbfba912b120c89ff Mon Sep 17 00:00:00 2001 From: furiax Date: Wed, 22 Jan 2025 21:51:09 +0100 Subject: [PATCH 06/14] fixed deletedriver didnt savechanges --- .../FormulaOneServer/Formula.db-shm | Bin 0 -> 32768 bytes .../FormulaOneServer/Formula.db-wal | Bin 0 -> 24752 bytes .../FormulaOneServer/Services/FormulaService.cs | 3 ++- 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Formula.db-wal diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm b/ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..324d69452222db36f65cbf16f03b29551381dd75 GIT binary patch literal 32768 zcmeI)JqiLb5C+h!zonLY32TqxNh}3BSxXyl;1z5vy@I{AR+d)6R+{K8*a|j*_rZ`5 zLNdGqOnIGzl;Tt4L0pHicGZ1#I**RaM>Vexw^@DJ?AMFww*2vaeCnO_?(-|nap*Uj z_TP3*J){x>1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dXjsivK=GeBL z3H(8z6MAv#Xqq!B1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly NK!5-N0t9jscmYPjEY$!2 literal 0 HcmV?d00001 diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db-wal b/ExternalAPI.Furiax/FormulaOneServer/Formula.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..800192f50874663797667239237d33924bf1a4fa GIT binary patch literal 24752 zcmeI)ze@sP9LMqJ6g2I}MGyoM8RB4}w1l);lORDut0-P1sEJxiix`wcfkQ)64*dzy z6palT1U2Q*5KT=L7?DHJbE&0kgoC{w?&rh7@qKaA=lOEpylG3gAI5|j7W&A&72@@i z$3@?2eb+y?mr@lZ})Ez1-j6G|qvggp?-Eol+EPd*}9 zI{F0;gQr#h=Er*@7pMuf*6VQ8hX4WyAbL8xCLE)R`)l>T zweX+O(iyq(ub;jb{Oy6YL^`9Te%~+9kqewp4Lv>YIn_okP}XySayJX-T?in600Iag zfB*srAbN5j>n+xP$3gt7kdiC>v0dfJpM+6W+ X009ILKmY**5I_I{1iCEHwOrs6 Date: Thu, 23 Jan 2025 09:09:16 +0100 Subject: [PATCH 07/14] added all current drivers to the context file to populate the db --- .../FormulaOneServer/Data/FormulaDbContext.cs | 188 +++++++++++++- .../FormulaOneServer/Formula.db | Bin 28672 -> 32768 bytes .../FormulaOneServer/Formula.db-shm | Bin 32768 -> 32768 bytes .../FormulaOneServer/Formula.db-wal | Bin 24752 -> 24752 bytes ...18_AddedAllF1DriversAsSeedData.Designer.cs | 236 ++++++++++++++++++ ...50123080618_AddedAllF1DriversAsSeedData.cs | 147 +++++++++++ .../FormulaDbContextModelSnapshot.cs | 182 ++++++++++++++ 7 files changed, 752 insertions(+), 1 deletion(-) create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Migrations/20250123080618_AddedAllF1DriversAsSeedData.Designer.cs create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Migrations/20250123080618_AddedAllF1DriversAsSeedData.cs diff --git a/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs b/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs index 7c29bb9..ca6a31b 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Data/FormulaDbContext.cs @@ -8,5 +8,191 @@ public FormulaDbContext(DbContextOptions options) : base(options) { } - public DbSet Drivers { get; set; } + public DbSet Drivers { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity().HasData( + new Driver + { + Id = 1, + DriverNumber = 1, + DriverName = "Max Verstappen", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/verstappen", + Team = "Red Bull Racing", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/red-bull-racing.png" + }, + new Driver + { + Id = 2, + DriverNumber = 30, + DriverName = "Liam Lawson", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/lawson", + Team = "Red Bull Racing", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/red-bull-racing.png" + }, + new Driver + { + Id = 3, + DriverNumber = 16, + DriverName = "Charles Leclerc", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/leclerc", + Team = "Ferrari", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/ferrari.png" + }, + new Driver + { + Id = 4, + DriverNumber = 44, + DriverName = "Lewis Hamilton", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hamilton", + Team = "Ferrari", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/ferrari.png" + }, + new Driver + { + Id = 5, + DriverNumber = 81, + DriverName = "Oscar Piastri", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/piastri", + Team = "McLaren", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mclaren.png" + }, + new Driver + { + Id = 6, + DriverNumber = 4, + DriverName = "Lando Norris", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/norris", + Team = "McLaren", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mclaren.png" + }, + new Driver + { + Id = 7, + DriverNumber = 63, + DriverName = "George Russel", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/russell", + Team = "Mercedes", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mercedes.png" + }, + new Driver + { + Id = 8, + DriverNumber = 12, + DriverName = "Andrea Kimi Antoneli", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/antonelli", + Team = "Mercedes", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mercedes.png" + }, + new Driver + { + Id = 9, + DriverNumber = 18, + DriverName = "Lance Stroll", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2024Drivers/stroll", + Team = "Aston Martin", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/aston-martin.png" + }, + new Driver + { + Id = 10, + DriverNumber = 14, + DriverName = "Fernando Alonso", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/alonso", + Team = "Aston Martin", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/aston-martin.png" + }, + new Driver + { + Id = 11, + DriverNumber = 23, + DriverName = "Alexander Albon", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/albon", + Team = "Williams", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/williams.png" + }, + new Driver + { + Id = 12, + DriverNumber = 55, + DriverName = "Carlos Sainz", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/sainz", + Team = "Williams", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/williams.png" + }, + new Driver + { + Id = 13, + DriverNumber = 10, + DriverName = "Pierre Gasly", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/gasly", + Team = "Alpine", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/alpine.png" + }, + new Driver + { + Id = 14, + DriverNumber = 7, + DriverName = "Jack Doohan", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/fom-website/drivers/2024Drivers/doohan", + Team = "Alpine", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/alpine.png" + }, + new Driver + { + Id = 15, + DriverNumber = 31, + DriverName = "Esteban Ocon", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/ocon", + Team = "Haas", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/haas.png" + }, + new Driver + { + Id = 16, + DriverNumber = 87, + DriverName = "Oliver Bearman", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2024Drivers/bearman", + Team = "Haas", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/haas.png" + }, + new Driver + { + Id = 17, + DriverNumber = 27, + DriverName = "Nico Hulkenberg", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hulkenberg", + Team = "Kick Sauber", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/kick-sauber.png" + }, + new Driver + { + Id = 18, + DriverNumber = 5, + DriverName = "Gabriel Bortoleto", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/bortoleto", + Team = "Kick Sauber", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/kick-sauber.png" + }, + new Driver + { + Id = 19, + DriverNumber = 6, + DriverName = "Isack Hadjar", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hadjar", + Team = "Racing Bulls", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/racing-bulls.png" + }, + new Driver + { + Id = 20, + DriverNumber = 22, + DriverName = "Yuki Tsunoda", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/tsunoda", + Team = "Racing Bulls", + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/racing-bulls.png" + } + ); + } } diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db b/ExternalAPI.Furiax/FormulaOneServer/Formula.db index 20f04eb5e084b65c2137e4f1976ffb608fccb550..c3ac55a07de4208f74eaa8d53a569a360c1475f6 100644 GIT binary patch literal 32768 zcmeI5%}*Og6u@^`Y`}atO_QP)H5rkj1{wTC2qdc7I>ZSy#t?9tpenM)-T}7khqJp5 zA!!t?8}(1mtduuLHDn)9gs)t@$<~jHaH^>l9_BSeL1~AvU53-y_U(4 zsk!W8ZXpHbWN`k9-@+i7UznLqEi92M=_Qi7mYbW&LMyZBY;MG>ZHk&R8eL%-MPC~v zx%3UF(5uuxrP|%yot32;YgkRTtQDBKT>`(c9HW|7LFGe_-dL4hB?|e00r6oq?@{!2 zb@aT_{~#QAuKusNk+lHW8@FE3hUWL7SU#594Q{XL{=QH$`a_31B3BY3R<=eH=p0JoqS@);?3t`Cna|DClX?1bO%}) zqqtUkIWK8z#EGBq9MW!#?4-{or)bQwsaD#KrI(NU5kUz5{2F}7U>A@85c>Ygs zIUXN7lgQ8Limgy}%4F1L?pYy_NeX{0gdc~$gB@;200|%gB!C2v01`j~NB{{S0VIF~ zkidUNASzLD_pbw_ccgRv>2+@c+D=O8F0UpywEZOj_y325--W(EdY|+>>3$q~()G0S zX~(1BPl4~-zn6Y!`%(M_4j+!qvBF(~bIn;F5|6LicF8&)i)l<&Xq12dL0P4VXwlGO zGQ_q~EnlQ&ewnIjfkGsQ!XwL~C4D7UG<2Kkc1)&PY}wF8*IB`WaHJT&#)@&)u~kYf zer|&{-1=hWl4?*nww&jYC?mzZs%VNma;utM&nL!`@fWryS3~dI7QHt_F#|f6wrp0Q zI+=s?$!X|`qxON+OHT2W_;!OH?OAH7mK5D()S#8!%e|HD7Fo~uvdV_BO7%}*aL7eB z*^zQP;N0$Y#VrrL_To;AkL-SsHw9mzmbx*oFwof8Z~W2-;)Y7%K$G=B#e%s2HX-Y#+h>az-Wlg!z?B`w{*cOEQotsg%A5svtYp5L zx#~;*pxu@J!EkG(UxwQeYASpBKzKzvIPTvGu2M}=!3<>Bx?+)OFE;|85xh&zeW^PB zk=LIA8tqh2_OL^fCP{L5G?2f9&P{e|Y2%gt`Ae5PBqp1HFIs{MP*hlDHuOB!C2v01`j~NB{{S zfrCh((tZrq`Z695*V2Hf>Uw8)?epGZV48CW*j8CLWV%#dQ%J6weyh6J*48IMzFKgfn zhG`orvyIENU@A-{7yN?273dm7P4cc)LT|Vv07Hwm<|H3WR;>prZ=+#TVObM jjsT2n&i&!T6&Jo4GF)KP)TlnE@?UEu7pl4IJUILxIOFK8 delta 166 zcmZo@U}|{4I6<11nSp_U9f(=KY5qF7Y7snQ3n18{6~QzJNa3pm@OG6@7EWbeBWMi zvtYn&{)rP*xj-5j`M)sme}M=EuuBOsGHY|Brp0qHGD~x~6lIpB78Qe(F$h3)$pZjy C3@F+F diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm b/ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm index 324d69452222db36f65cbf16f03b29551381dd75..b90bc6e9fc236c24254dd530e6ecb64df19839bc 100644 GIT binary patch delta 168 zcmZo@U}|V!N|1P@%K!q*K+MR%AixHsIe^%pLgdN2r@aLU0)G}L@=jRo{O(lz&Zh@9 zld67Vf`Tm2I52>j4Kkkzhi=`$<(l xF+o9=6=)s^z|4lxAbZ$1E)4bCxPgh8nUR5c`V+S46F=n8yB)`0{|G&E2RJc diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db-wal b/ExternalAPI.Furiax/FormulaOneServer/Formula.db-wal index 800192f50874663797667239237d33924bf1a4fa..836d3beeacc826c3921e818a164277e424f32b11 100644 GIT binary patch literal 24752 zcmeI4O>7%Q6o9==>^ROZX$`3=V5=xXk&|p&8bxpbB`u`Tq$zD7DhSMYcM>m|-8D1o zI-!lC^&P>L1BH8!hy&u(9ykPXfm78AK>|5|fCD{LDyn!h{;3PCp-xN^^H#Amvx&3w zzL}lb{bqJYmm~Sm&}wfe)E$!Bo85nWyuai9OWC#E;_9n6pMqVH%Ke`{bGZ4+g)=K1 zuv6>$Jp@0vAps-3aLM zmeAgKT-z^vpWgYH!soU-CwJwW_q2ur8Z7o}{b}FNh^Gz1p_WaCXFcv@896v?dX8Zw zeM+39NqBOWFqR_beA0Hv939TMbB5`;K6QP=B91ZZIYT*`61Gnb`5j>#I&f&j;KYO@ z4yCe;3HhBW$5Q{-$Yz*FEMqoFvc5NHCYkNn{@~lm(UHMi^5Bz)4&3*sR^e)19`|tZ z%HHrr*7YoMHal== zyEwG<00%R#8CqYJD%x;!n77UOAwjY!$~V*+YQ>Q9xbHFQdlMwZZOZiV(vI+PD4Kp+ z6)hioNYQ9YG&YTNmd#Ta>SFGMZF>5#a&}(@j9{S~V7weG4QTOtHjOkP8|xt+uuYWv zh!iE5fy>)%2*C0n0VIF~kN^@u z0!RP}Ac0WH3-p2?h=U)9OBFzihQLBE0ICAL0D1xR0_X*VQPm5CFlo!hNHMiJZV$TsXigov0~sC+9B}Q<^0H_Rcc_v zLOf?PX2WdBme_DXZ1XRz@*ePl$J*F2FQNB}CFqQ{ecMOc$8ijmHz$cjub*IRJ{z^Ib7a(wF z-y-ksOJ3mmjW@o{%v}0V$^xzHmi$$;>lS)}O<7s?U#}M__mJoXT#8-*y+A$3zfI91 zwe|Jr1%yGA2tY5ug@IlGngef)Z`{k$P z1%BAGa3J&UkG~ey3)~L1UW;CDS&Q5V-@fyv0r-2|kN^@u0!W}C3E%>%dKx5LK=t>h wxvQ@it4){T0xDcUb*}|f_t<8 literal 24752 zcmeI)ze@sP9LMqJ6g2I}MGyoM8RB4}w1l);lORDut0-P1sEJxiix`wcfkQ)64*dzy z6palT1U2Q*5KT=L7?DHJbE&0kgoC{w?&rh7@qKaA=lOEpylG3gAI5|j7W&A&72@@i z$3@?2eb+y?mr@lZ})Ez1-j6G|qvggp?-Eol+EPd*}9 zI{F0;gQr#h=Er*@7pMuf*6VQ8hX4WyAbL8xCLE)R`)l>T zweX+O(iyq(ub;jb{Oy6YL^`9Te%~+9kqewp4Lv>YIn_okP}XySayJX-T?in600Iag zfB*srAbN5j>n+xP$3gt7kdiC>v0dfJpM+6W+ X009ILKmY**5I_I{1iCEHwOrs6 +using FormulaOneServer.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace FormulaOneServer.Migrations +{ + [DbContext(typeof(FormulaDbContext))] + [Migration("20250123080618_AddedAllF1DriversAsSeedData")] + partial class AddedAllF1DriversAsSeedData + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.1"); + + modelBuilder.Entity("FormulaOneServer.Models.Driver", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CarImageLink") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverImageLink") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DriverNumber") + .HasColumnType("INTEGER"); + + b.Property("Team") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Drivers"); + + b.HasData( + new + { + Id = 1, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/red-bull-racing.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/verstappen", + DriverName = "Max Verstappen", + DriverNumber = 1, + Team = "Red Bull Racing" + }, + new + { + Id = 2, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/red-bull-racing.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/lawson", + DriverName = "Liam Lawson", + DriverNumber = 30, + Team = "Red Bull Racing" + }, + new + { + Id = 3, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/ferrari.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/leclerc", + DriverName = "Charles Leclerc", + DriverNumber = 16, + Team = "Ferrari" + }, + new + { + Id = 4, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/ferrari.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hamilton", + DriverName = "Lewis Hamilton", + DriverNumber = 44, + Team = "Ferrari" + }, + new + { + Id = 5, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mclaren.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/piastri", + DriverName = "Oscar Piastri", + DriverNumber = 81, + Team = "McLaren" + }, + new + { + Id = 6, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mclaren.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/norris", + DriverName = "Lando Norris", + DriverNumber = 4, + Team = "McLaren" + }, + new + { + Id = 7, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mercedes.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/russell", + DriverName = "George Russel", + DriverNumber = 63, + Team = "Mercedes" + }, + new + { + Id = 8, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mercedes.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/antonelli", + DriverName = "Andrea Kimi Antoneli", + DriverNumber = 12, + Team = "Mercedes" + }, + new + { + Id = 9, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/aston-martin.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2024Drivers/stroll", + DriverName = "Lance Stroll", + DriverNumber = 18, + Team = "Aston Martin" + }, + new + { + Id = 10, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/aston-martin.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/alonso", + DriverName = "Fernando Alonso", + DriverNumber = 14, + Team = "Aston Martin" + }, + new + { + Id = 11, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/williams.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/albon", + DriverName = "Alexander Albon", + DriverNumber = 23, + Team = "Williams" + }, + new + { + Id = 12, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/williams.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/sainz", + DriverName = "Carlos Sainz", + DriverNumber = 55, + Team = "Williams" + }, + new + { + Id = 13, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/alpine.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/gasly", + DriverName = "Pierre Gasly", + DriverNumber = 10, + Team = "Alpine" + }, + new + { + Id = 14, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/alpine.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/fom-website/drivers/2024Drivers/doohan", + DriverName = "Jack Doohan", + DriverNumber = 7, + Team = "Alpine" + }, + new + { + Id = 15, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/haas.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/ocon", + DriverName = "Esteban Ocon", + DriverNumber = 31, + Team = "Haas" + }, + new + { + Id = 16, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/haas.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2024Drivers/bearman", + DriverName = "Oliver Bearman", + DriverNumber = 87, + Team = "Haas" + }, + new + { + Id = 17, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/kick-sauber.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hulkenberg", + DriverName = "Nico Hulkenberg", + DriverNumber = 27, + Team = "Kick Sauber" + }, + new + { + Id = 18, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/kick-sauber.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/bortoleto", + DriverName = "Gabriel Bortoleto", + DriverNumber = 5, + Team = "Kick Sauber" + }, + new + { + Id = 19, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/racing-bulls.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hadjar", + DriverName = "Isack Hadjar", + DriverNumber = 6, + Team = "Racing Bulls" + }, + new + { + Id = 20, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/racing-bulls.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/tsunoda", + DriverName = "Yuki Tsunoda", + DriverNumber = 22, + Team = "Racing Bulls" + }); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250123080618_AddedAllF1DriversAsSeedData.cs b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250123080618_AddedAllF1DriversAsSeedData.cs new file mode 100644 index 0000000..19bd3a6 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneServer/Migrations/20250123080618_AddedAllF1DriversAsSeedData.cs @@ -0,0 +1,147 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace FormulaOneServer.Migrations +{ + /// + public partial class AddedAllF1DriversAsSeedData : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Drivers", + columns: new[] { "Id", "CarImageLink", "DriverImageLink", "DriverName", "DriverNumber", "Team" }, + values: new object[,] + { + { 1, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/red-bull-racing.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/verstappen", "Max Verstappen", 1, "Red Bull Racing" }, + { 2, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/red-bull-racing.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/lawson", "Liam Lawson", 30, "Red Bull Racing" }, + { 3, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/ferrari.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/leclerc", "Charles Leclerc", 16, "Ferrari" }, + { 4, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/ferrari.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hamilton", "Lewis Hamilton", 44, "Ferrari" }, + { 5, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mclaren.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/piastri", "Oscar Piastri", 81, "McLaren" }, + { 6, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mclaren.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/norris", "Lando Norris", 4, "McLaren" }, + { 7, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mercedes.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/russell", "George Russel", 63, "Mercedes" }, + { 8, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mercedes.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/antonelli", "Andrea Kimi Antoneli", 12, "Mercedes" }, + { 9, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/aston-martin.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2024Drivers/stroll", "Lance Stroll", 18, "Aston Martin" }, + { 10, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/aston-martin.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/alonso", "Fernando Alonso", 14, "Aston Martin" }, + { 11, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/williams.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/albon", "Alexander Albon", 23, "Williams" }, + { 12, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/williams.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/sainz", "Carlos Sainz", 55, "Williams" }, + { 13, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/alpine.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/gasly", "Pierre Gasly", 10, "Alpine" }, + { 14, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/alpine.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/fom-website/drivers/2024Drivers/doohan", "Jack Doohan", 7, "Alpine" }, + { 15, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/haas.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/ocon", "Esteban Ocon", 31, "Haas" }, + { 16, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/haas.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2024Drivers/bearman", "Oliver Bearman", 87, "Haas" }, + { 17, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/kick-sauber.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hulkenberg", "Nico Hulkenberg", 27, "Kick Sauber" }, + { 18, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/kick-sauber.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/bortoleto", "Gabriel Bortoleto", 5, "Kick Sauber" }, + { 19, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/racing-bulls.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hadjar", "Isack Hadjar", 6, "Racing Bulls" }, + { 20, "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/racing-bulls.png", "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/tsunoda", "Yuki Tsunoda", 22, "Racing Bulls" } + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 1); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 2); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 3); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 4); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 5); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 6); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 7); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 8); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 9); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 10); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 11); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 12); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 13); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 14); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 15); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 16); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 17); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 18); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 19); + + migrationBuilder.DeleteData( + table: "Drivers", + keyColumn: "Id", + keyValue: 20); + } + } +} diff --git a/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs b/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs index ae24021..4f6ffbb 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Migrations/FormulaDbContextModelSnapshot.cs @@ -44,6 +44,188 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Drivers"); + + b.HasData( + new + { + Id = 1, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/red-bull-racing.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/verstappen", + DriverName = "Max Verstappen", + DriverNumber = 1, + Team = "Red Bull Racing" + }, + new + { + Id = 2, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/red-bull-racing.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/lawson", + DriverName = "Liam Lawson", + DriverNumber = 30, + Team = "Red Bull Racing" + }, + new + { + Id = 3, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/ferrari.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/leclerc", + DriverName = "Charles Leclerc", + DriverNumber = 16, + Team = "Ferrari" + }, + new + { + Id = 4, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/ferrari.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hamilton", + DriverName = "Lewis Hamilton", + DriverNumber = 44, + Team = "Ferrari" + }, + new + { + Id = 5, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mclaren.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/piastri", + DriverName = "Oscar Piastri", + DriverNumber = 81, + Team = "McLaren" + }, + new + { + Id = 6, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mclaren.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/norris", + DriverName = "Lando Norris", + DriverNumber = 4, + Team = "McLaren" + }, + new + { + Id = 7, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mercedes.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/russell", + DriverName = "George Russel", + DriverNumber = 63, + Team = "Mercedes" + }, + new + { + Id = 8, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/mercedes.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/antonelli", + DriverName = "Andrea Kimi Antoneli", + DriverNumber = 12, + Team = "Mercedes" + }, + new + { + Id = 9, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/aston-martin.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2024Drivers/stroll", + DriverName = "Lance Stroll", + DriverNumber = 18, + Team = "Aston Martin" + }, + new + { + Id = 10, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/aston-martin.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/alonso", + DriverName = "Fernando Alonso", + DriverNumber = 14, + Team = "Aston Martin" + }, + new + { + Id = 11, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/williams.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/albon", + DriverName = "Alexander Albon", + DriverNumber = 23, + Team = "Williams" + }, + new + { + Id = 12, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/williams.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/sainz", + DriverName = "Carlos Sainz", + DriverNumber = 55, + Team = "Williams" + }, + new + { + Id = 13, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/alpine.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/gasly", + DriverName = "Pierre Gasly", + DriverNumber = 10, + Team = "Alpine" + }, + new + { + Id = 14, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/alpine.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/fom-website/drivers/2024Drivers/doohan", + DriverName = "Jack Doohan", + DriverNumber = 7, + Team = "Alpine" + }, + new + { + Id = 15, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/haas.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/ocon", + DriverName = "Esteban Ocon", + DriverNumber = 31, + Team = "Haas" + }, + new + { + Id = 16, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/haas.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2024Drivers/bearman", + DriverName = "Oliver Bearman", + DriverNumber = 87, + Team = "Haas" + }, + new + { + Id = 17, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/kick-sauber.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hulkenberg", + DriverName = "Nico Hulkenberg", + DriverNumber = 27, + Team = "Kick Sauber" + }, + new + { + Id = 18, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/kick-sauber.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/bortoleto", + DriverName = "Gabriel Bortoleto", + DriverNumber = 5, + Team = "Kick Sauber" + }, + new + { + Id = 19, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/racing-bulls.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_auto,w_1320/content/dam/fom-website/drivers/2025Drivers/hadjar", + DriverName = "Isack Hadjar", + DriverNumber = 6, + Team = "Racing Bulls" + }, + new + { + Id = 20, + CarImageLink = "https://media.formula1.com/d_team_car_fallback_image.png/content/dam/fom-website/teams/2025/racing-bulls.png", + DriverImageLink = "https://media.formula1.com/image/upload/f_auto,c_limit,q_75,w_1320/content/dam/fom-website/drivers/2024Drivers/tsunoda", + DriverName = "Yuki Tsunoda", + DriverNumber = 22, + Team = "Racing Bulls" + }); }); #pragma warning restore 612, 618 } From 030ba4ef9d9aada562cf9fe9027613b11910fbaa Mon Sep 17 00:00:00 2001 From: furiax Date: Thu, 23 Jan 2025 13:39:19 +0100 Subject: [PATCH 08/14] started on the React UI and added CORS access in program.cs --- ExternalAPI.Furiax/ExternalAPI.Furiax.sln | 6 + .../FormulaOneServer/Formula.db | Bin 32768 -> 32768 bytes .../FormulaOneServer/Formula.db-shm | Bin 32768 -> 32768 bytes .../FormulaOneServer/Formula.db-wal | Bin 24752 -> 0 bytes .../FormulaOneServer/Program.cs | 10 + ExternalAPI.Furiax/FormulaUI/.gitignore | 24 + ExternalAPI.Furiax/FormulaUI/README.md | 8 + ExternalAPI.Furiax/FormulaUI/eslint.config.js | 38 + ExternalAPI.Furiax/FormulaUI/index.html | 13 + .../FormulaUI/package-lock.json | 4600 +++++++++++++++++ ExternalAPI.Furiax/FormulaUI/package.json | 28 + ExternalAPI.Furiax/FormulaUI/public/vite.svg | 1 + ExternalAPI.Furiax/FormulaUI/src/App.css | 42 + ExternalAPI.Furiax/FormulaUI/src/App.jsx | 16 + ExternalAPI.Furiax/FormulaUI/src/Body.jsx | 20 + ExternalAPI.Furiax/FormulaUI/src/Driver.jsx | 12 + ExternalAPI.Furiax/FormulaUI/src/Header.jsx | 7 + .../FormulaUI/src/assets/react.svg | 1 + ExternalAPI.Furiax/FormulaUI/src/index.css | 68 + ExternalAPI.Furiax/FormulaUI/src/main.jsx | 10 + ExternalAPI.Furiax/FormulaUI/vite.config.js | 7 + 21 files changed, 4911 insertions(+) create mode 100644 ExternalAPI.Furiax/FormulaUI/.gitignore create mode 100644 ExternalAPI.Furiax/FormulaUI/README.md create mode 100644 ExternalAPI.Furiax/FormulaUI/eslint.config.js create mode 100644 ExternalAPI.Furiax/FormulaUI/index.html create mode 100644 ExternalAPI.Furiax/FormulaUI/package-lock.json create mode 100644 ExternalAPI.Furiax/FormulaUI/package.json create mode 100644 ExternalAPI.Furiax/FormulaUI/public/vite.svg create mode 100644 ExternalAPI.Furiax/FormulaUI/src/App.css create mode 100644 ExternalAPI.Furiax/FormulaUI/src/App.jsx create mode 100644 ExternalAPI.Furiax/FormulaUI/src/Body.jsx create mode 100644 ExternalAPI.Furiax/FormulaUI/src/Driver.jsx create mode 100644 ExternalAPI.Furiax/FormulaUI/src/Header.jsx create mode 100644 ExternalAPI.Furiax/FormulaUI/src/assets/react.svg create mode 100644 ExternalAPI.Furiax/FormulaUI/src/index.css create mode 100644 ExternalAPI.Furiax/FormulaUI/src/main.jsx create mode 100644 ExternalAPI.Furiax/FormulaUI/vite.config.js diff --git a/ExternalAPI.Furiax/ExternalAPI.Furiax.sln b/ExternalAPI.Furiax/ExternalAPI.Furiax.sln index a2aa0f4..82af187 100644 --- a/ExternalAPI.Furiax/ExternalAPI.Furiax.sln +++ b/ExternalAPI.Furiax/ExternalAPI.Furiax.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 17.12.35707.178 d17.12 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormulaOneServer", "FormulaOneServer\FormulaOneServer.csproj", "{DDC111E3-B359-4008-B827-9146F185389A}" EndProject +Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "FormulaUI", "FormulaUI\FormulaUI.njsproj", "{D176686F-845B-4CF8-90AF-3C0923F0A3C1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {DDC111E3-B359-4008-B827-9146F185389A}.Debug|Any CPU.Build.0 = Debug|Any CPU {DDC111E3-B359-4008-B827-9146F185389A}.Release|Any CPU.ActiveCfg = Release|Any CPU {DDC111E3-B359-4008-B827-9146F185389A}.Release|Any CPU.Build.0 = Release|Any CPU + {D176686F-845B-4CF8-90AF-3C0923F0A3C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D176686F-845B-4CF8-90AF-3C0923F0A3C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D176686F-845B-4CF8-90AF-3C0923F0A3C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D176686F-845B-4CF8-90AF-3C0923F0A3C1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db b/ExternalAPI.Furiax/FormulaOneServer/Formula.db index c3ac55a07de4208f74eaa8d53a569a360c1475f6..3b8ee0d220909f1dcdcc3fd8d9a3b5e320ce9414 100644 GIT binary patch delta 59 zcmV-B0L1@*fC7Mk06%qgd delta 54 zcmV-60LlM=fC7Mk0Dz^o@1e@vP+ni9o2#n7F1^7%Q6o9==>^ROZX$`3=V5=xXk&|p&8bxpbB`u`Tq$zD7DhSMYcM>m|-8D1o zI-!lC^&P>L1BH8!hy&u(9ykPXfm78AK>|5|fCD{LDyn!h{;3PCp-xN^^H#Amvx&3w zzL}lb{bqJYmm~Sm&}wfe)E$!Bo85nWyuai9OWC#E;_9n6pMqVH%Ke`{bGZ4+g)=K1 zuv6>$Jp@0vAps-3aLM zmeAgKT-z^vpWgYH!soU-CwJwW_q2ur8Z7o}{b}FNh^Gz1p_WaCXFcv@896v?dX8Zw zeM+39NqBOWFqR_beA0Hv939TMbB5`;K6QP=B91ZZIYT*`61Gnb`5j>#I&f&j;KYO@ z4yCe;3HhBW$5Q{-$Yz*FEMqoFvc5NHCYkNn{@~lm(UHMi^5Bz)4&3*sR^e)19`|tZ z%HHrr*7YoMHal== zyEwG<00%R#8CqYJD%x;!n77UOAwjY!$~V*+YQ>Q9xbHFQdlMwZZOZiV(vI+PD4Kp+ z6)hioNYQ9YG&YTNmd#Ta>SFGMZF>5#a&}(@j9{S~V7weG4QTOtHjOkP8|xt+uuYWv zh!iE5fy>)%2*C0n0VIF~kN^@u z0!RP}Ac0WH3-p2?h=U)9OBFzihQLBE0ICAL0D1xR0_X*VQPm5CFlo!hNHMiJZV$TsXigov0~sC+9B}Q<^0H_Rcc_v zLOf?PX2WdBme_DXZ1XRz@*ePl$J*F2FQNB}CFqQ{ecMOc$8ijmHz$cjub*IRJ{z^Ib7a(wF z-y-ksOJ3mmjW@o{%v}0V$^xzHmi$$;>lS)}O<7s?U#}M__mJoXT#8-*y+A$3zfI91 zwe|Jr1%yGA2tY5ug@IlGngef)Z`{k$P z1%BAGa3J&UkG~ey3)~L1UW;CDS&Q5V-@fyv0r-2|kN^@u0!W}C3E%>%dKx5LK=t>h wxvQ@it4){T0xDcUb*}|f_t<8 diff --git a/ExternalAPI.Furiax/FormulaOneServer/Program.cs b/ExternalAPI.Furiax/FormulaOneServer/Program.cs index 31d3464..982ce25 100644 --- a/ExternalAPI.Furiax/FormulaOneServer/Program.cs +++ b/ExternalAPI.Furiax/FormulaOneServer/Program.cs @@ -2,8 +2,16 @@ using FormulaOneServer.Services; using Microsoft.EntityFrameworkCore; +var MyAllowSpecificOrigins = "_myAllowSpecificOrigins"; + var builder = WebApplication.CreateBuilder(args); +builder.Services.AddCors(opt => +{ + opt.AddPolicy(name: MyAllowSpecificOrigins, policy => + //React page is running on localhost:/5176, adjust accordingly + { policy.WithOrigins("http://localhost:5176");}); +}); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddControllers(); @@ -18,6 +26,8 @@ app.UseSwaggerUI(); } +app.UseCors(MyAllowSpecificOrigins); + app.MapControllers(); app.Run(); \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaUI/.gitignore b/ExternalAPI.Furiax/FormulaUI/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/ExternalAPI.Furiax/FormulaUI/README.md b/ExternalAPI.Furiax/FormulaUI/README.md new file mode 100644 index 0000000..f768e33 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/README.md @@ -0,0 +1,8 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh diff --git a/ExternalAPI.Furiax/FormulaUI/eslint.config.js b/ExternalAPI.Furiax/FormulaUI/eslint.config.js new file mode 100644 index 0000000..238d2e4 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/eslint.config.js @@ -0,0 +1,38 @@ +import js from '@eslint/js' +import globals from 'globals' +import react from 'eslint-plugin-react' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' + +export default [ + { ignores: ['dist'] }, + { + files: ['**/*.{js,jsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + settings: { react: { version: '18.3' } }, + plugins: { + react, + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...js.configs.recommended.rules, + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + ...reactHooks.configs.recommended.rules, + 'react/jsx-no-target-blank': 'off', + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +] diff --git a/ExternalAPI.Furiax/FormulaUI/index.html b/ExternalAPI.Furiax/FormulaUI/index.html new file mode 100644 index 0000000..0c589ec --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
+ + + diff --git a/ExternalAPI.Furiax/FormulaUI/package-lock.json b/ExternalAPI.Furiax/FormulaUI/package-lock.json new file mode 100644 index 0000000..932d1b7 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/package-lock.json @@ -0,0 +1,4600 @@ +{ + "name": "formulaui", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "formulaui", + "version": "0.0.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.17.0", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.17.0", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.16", + "globals": "^15.14.0", + "vite": "^6.0.5" + } + }, + "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/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", + "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.5", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", + "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.31.0.tgz", + "integrity": "sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.31.0.tgz", + "integrity": "sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.31.0.tgz", + "integrity": "sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.31.0.tgz", + "integrity": "sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.31.0.tgz", + "integrity": "sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.31.0.tgz", + "integrity": "sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.31.0.tgz", + "integrity": "sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.31.0.tgz", + "integrity": "sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.31.0.tgz", + "integrity": "sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.31.0.tgz", + "integrity": "sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.31.0.tgz", + "integrity": "sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.31.0.tgz", + "integrity": "sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.31.0.tgz", + "integrity": "sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.31.0.tgz", + "integrity": "sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.31.0.tgz", + "integrity": "sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.31.0.tgz", + "integrity": "sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.31.0.tgz", + "integrity": "sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.31.0.tgz", + "integrity": "sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.31.0.tgz", + "integrity": "sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", + "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", + "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", + "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.0", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "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": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "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.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001695", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", + "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "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/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "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/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/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/electron-to-chromium": { + "version": "1.5.86", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.86.tgz", + "integrity": "sha512-/D7GAAaCRBQFBBcop6SfAAGH37djtpWkOuYhyAajw0l5vsfeSsUQYxaFPwr1c/mC/flARCDdKFo5gpFqNI+18w==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.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-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", + "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.18.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", + "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.18.tgz", + "integrity": "sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "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-intrinsic": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "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/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "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/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "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/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "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/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "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.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=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-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "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/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "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.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "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/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.31.0.tgz", + "integrity": "sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.31.0", + "@rollup/rollup-android-arm64": "4.31.0", + "@rollup/rollup-darwin-arm64": "4.31.0", + "@rollup/rollup-darwin-x64": "4.31.0", + "@rollup/rollup-freebsd-arm64": "4.31.0", + "@rollup/rollup-freebsd-x64": "4.31.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.31.0", + "@rollup/rollup-linux-arm-musleabihf": "4.31.0", + "@rollup/rollup-linux-arm64-gnu": "4.31.0", + "@rollup/rollup-linux-arm64-musl": "4.31.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.31.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.31.0", + "@rollup/rollup-linux-riscv64-gnu": "4.31.0", + "@rollup/rollup-linux-s390x-gnu": "4.31.0", + "@rollup/rollup-linux-x64-gnu": "4.31.0", + "@rollup/rollup-linux-x64-musl": "4.31.0", + "@rollup/rollup-win32-arm64-msvc": "4.31.0", + "@rollup/rollup-win32-ia32-msvc": "4.31.0", + "@rollup/rollup-win32-x64-msvc": "4.31.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "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.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "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/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/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "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/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", + "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.24.2", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "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/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/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/ExternalAPI.Furiax/FormulaUI/package.json b/ExternalAPI.Furiax/FormulaUI/package.json new file mode 100644 index 0000000..07dbcba --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/package.json @@ -0,0 +1,28 @@ +{ + "name": "formulaui", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.17.0", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", + "@vitejs/plugin-react": "^4.3.4", + "eslint": "^9.17.0", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.16", + "globals": "^15.14.0", + "vite": "^6.0.5" + } +} diff --git a/ExternalAPI.Furiax/FormulaUI/public/vite.svg b/ExternalAPI.Furiax/FormulaUI/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaUI/src/App.css b/ExternalAPI.Furiax/FormulaUI/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/ExternalAPI.Furiax/FormulaUI/src/App.jsx b/ExternalAPI.Furiax/FormulaUI/src/App.jsx new file mode 100644 index 0000000..377dff5 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/src/App.jsx @@ -0,0 +1,16 @@ +import { useState } from 'react' +import './App.css' +import Header from './Header.jsx' +import Body from './Body.jsx' + +function App() { + + return ( + <> +
+ + + ) +} + +export default App diff --git a/ExternalAPI.Furiax/FormulaUI/src/Body.jsx b/ExternalAPI.Furiax/FormulaUI/src/Body.jsx new file mode 100644 index 0000000..8d44108 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/src/Body.jsx @@ -0,0 +1,20 @@ +import { useState, useEffect } from "react" +import Driver from "./Driver.jsx" + +export default function Body(){ + const [drivers, setDrivers] = useState(null); + + useEffect(()=>{ + fetch('https://localhost:7215/api/Formula') + .then(res => { return res.json();}) + .then(data => { setDrivers(data); + console.log("Drivers data: ", data); + }); + + },[]); + return( + <> + + + ) +} \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaUI/src/Driver.jsx b/ExternalAPI.Furiax/FormulaUI/src/Driver.jsx new file mode 100644 index 0000000..011dd9f --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/src/Driver.jsx @@ -0,0 +1,12 @@ +export default function Driver(){ + return( + <> +
+

No. Naam

+ Picture of driver +

Team

+ Picture of car +
+ + ) +} \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaUI/src/Header.jsx b/ExternalAPI.Furiax/FormulaUI/src/Header.jsx new file mode 100644 index 0000000..744e3b7 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/src/Header.jsx @@ -0,0 +1,7 @@ +export default function Header(){ + return( + <> +

Race Pilots

+ + ) +} \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaUI/src/assets/react.svg b/ExternalAPI.Furiax/FormulaUI/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaUI/src/index.css b/ExternalAPI.Furiax/FormulaUI/src/index.css new file mode 100644 index 0000000..6119ad9 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/ExternalAPI.Furiax/FormulaUI/src/main.jsx b/ExternalAPI.Furiax/FormulaUI/src/main.jsx new file mode 100644 index 0000000..b9a1a6d --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/src/main.jsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/ExternalAPI.Furiax/FormulaUI/vite.config.js b/ExternalAPI.Furiax/FormulaUI/vite.config.js new file mode 100644 index 0000000..8b0f57b --- /dev/null +++ b/ExternalAPI.Furiax/FormulaUI/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From e3f5c7fe32b58a881a4646cfe1b5651098af0241 Mon Sep 17 00:00:00 2001 From: furiax Date: Thu, 23 Jan 2025 19:48:37 +0100 Subject: [PATCH 09/14] added styling --- .../FormulaOneServer/Formula.db-shm | Bin 32768 -> 0 bytes .../FormulaOneServer/Formula.db-wal | 0 ExternalAPI.Furiax/FormulaUI/src/App.css | 38 +------ ExternalAPI.Furiax/FormulaUI/src/App.jsx | 1 - ExternalAPI.Furiax/FormulaUI/src/Body.jsx | 27 +++-- ExternalAPI.Furiax/FormulaUI/src/Driver.jsx | 11 +- ExternalAPI.Furiax/FormulaUI/src/Header.jsx | 6 +- .../FormulaUI/src/assets/flag.png | Bin 0 -> 55531 bytes .../FormulaUI/src/assets/logo.png | Bin 0 -> 56751 bytes ExternalAPI.Furiax/FormulaUI/src/index.css | 98 +++++++++++------- 10 files changed, 92 insertions(+), 89 deletions(-) delete mode 100644 ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm delete mode 100644 ExternalAPI.Furiax/FormulaOneServer/Formula.db-wal create mode 100644 ExternalAPI.Furiax/FormulaUI/src/assets/flag.png create mode 100644 ExternalAPI.Furiax/FormulaUI/src/assets/logo.png diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm b/ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3{ - fetch('https://localhost:7215/api/Formula') - .then(res => { return res.json();}) - .then(data => { setDrivers(data); - console.log("Drivers data: ", data); - }); - + fetch('https://localhost:7215/api/Formula') + .then(res => res.json()) + .then(data => { + setDrivers(data); + console.log("data:",data); + }); },[]); + console.log("drivers:",drivers); return( <> - +
+ {drivers ? ( + drivers.map((driver, index) => ( + + )) + ) : (

Loading drivers...

)} +
) } \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaUI/src/Driver.jsx b/ExternalAPI.Furiax/FormulaUI/src/Driver.jsx index 011dd9f..e1426d9 100644 --- a/ExternalAPI.Furiax/FormulaUI/src/Driver.jsx +++ b/ExternalAPI.Furiax/FormulaUI/src/Driver.jsx @@ -1,11 +1,12 @@ -export default function Driver(){ +export default function Driver({number, name, team, driverImage, carImage}){ + console.log("driverimage=", driverImage); return( <>
-

No. Naam

- Picture of driver -

Team

- Picture of car +

{number}. {name}

+ {`Picture +

{team}

+ {`Picture
) diff --git a/ExternalAPI.Furiax/FormulaUI/src/Header.jsx b/ExternalAPI.Furiax/FormulaUI/src/Header.jsx index 744e3b7..c8002c7 100644 --- a/ExternalAPI.Furiax/FormulaUI/src/Header.jsx +++ b/ExternalAPI.Furiax/FormulaUI/src/Header.jsx @@ -1,7 +1,11 @@ export default function Header(){ return( <> -

Race Pilots

+
+ +

F1 Pilots

+ +
) } \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaUI/src/assets/flag.png b/ExternalAPI.Furiax/FormulaUI/src/assets/flag.png new file mode 100644 index 0000000000000000000000000000000000000000..99363c19225b8eaa46879b8a619cccc185c48b3c GIT binary patch literal 55531 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 Date: Thu, 23 Jan 2025 19:50:19 +0100 Subject: [PATCH 10/14] Create ReadMe.md --- ExternalAPI.Furiax/ReadMe.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 ExternalAPI.Furiax/ReadMe.md diff --git a/ExternalAPI.Furiax/ReadMe.md b/ExternalAPI.Furiax/ReadMe.md new file mode 100644 index 0000000..e847774 --- /dev/null +++ b/ExternalAPI.Furiax/ReadMe.md @@ -0,0 +1 @@ +ExternalAPI From 315c001c0aef218418d661f6432dfae42c99049f Mon Sep 17 00:00:00 2001 From: Carl M Date: Thu, 23 Jan 2025 19:58:11 +0100 Subject: [PATCH 11/14] Update ReadMe.md --- ExternalAPI.Furiax/ReadMe.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ExternalAPI.Furiax/ReadMe.md b/ExternalAPI.Furiax/ReadMe.md index e847774..e98f69c 100644 --- a/ExternalAPI.Furiax/ReadMe.md +++ b/ExternalAPI.Furiax/ReadMe.md @@ -1 +1,12 @@ -ExternalAPI +# External API + +This is an exercise from [The C# Academy](https://www.thecsharpacademy.com). + +## Requirements +Create an ASP.NET Web API and a React frontend that makes a GET request to this API. + +I have chosen to create an API that contains all F1 drivers for the 2025 season and display them in a grid on a React page. + +## Goals +- Practice creating ASP.NET Web APIs. +- Build a React frontend to practice working with components, `useState`, and `useEffect`. From ca1be9428f7ca101415b59a548f3f6a809a9935f Mon Sep 17 00:00:00 2001 From: Carl M Date: Thu, 23 Jan 2025 19:59:47 +0100 Subject: [PATCH 12/14] Update ReadMe.md --- ExternalAPI.Furiax/ReadMe.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ExternalAPI.Furiax/ReadMe.md b/ExternalAPI.Furiax/ReadMe.md index e98f69c..e44047b 100644 --- a/ExternalAPI.Furiax/ReadMe.md +++ b/ExternalAPI.Furiax/ReadMe.md @@ -5,8 +5,8 @@ This is an exercise from [The C# Academy](https://www.thecsharpacademy.com). ## Requirements Create an ASP.NET Web API and a React frontend that makes a GET request to this API. -I have chosen to create an API that contains all F1 drivers for the 2025 season and display them in a grid on a React page. +I have chosen to create an API that contains all F1 drivers for the 2025 season and display them on a React page. ## Goals - Practice creating ASP.NET Web APIs. -- Build a React frontend to practice working with components, `useState`, and `useEffect`. +- Build a React frontend to get used to working with components, `useState`, and `useEffect`. From f19a56a7accd0e78e5dd7c23aca826510d1d0417 Mon Sep 17 00:00:00 2001 From: furiax Date: Thu, 23 Jan 2025 21:49:58 +0100 Subject: [PATCH 13/14] Connected React to the API so they both run from VS2022 --- ExternalAPI.Furiax/ExternalAPI.Furiax.sln | 14 ++++++++------ .../{FormulaUI => FormulaOneClient}/.gitignore | 0 .../FormulaOneClient/CHANGELOG.md | 12 ++++++++++++ .../FormulaOneClient/FormulaOneClient.esproj | 11 +++++++++++ .../{FormulaUI => FormulaOneClient}/README.md | 0 .../eslint.config.js | 0 .../{FormulaUI => FormulaOneClient}/index.html | 0 .../package-lock.json | 10 +++++----- .../package.json | 2 +- .../public/vite.svg | 0 .../{FormulaUI => FormulaOneClient}/src/App.css | 0 .../{FormulaUI => FormulaOneClient}/src/App.jsx | 0 .../src/Body.jsx | 0 .../src/Driver.jsx | 0 .../src/Header.jsx | 0 .../src/assets/flag.png | Bin .../src/assets/logo.png | Bin .../src/assets/react.svg | 0 .../src/index.css | 0 .../src/main.jsx | 0 .../FormulaOneClient/vite.config.js | 12 ++++++++++++ .../FormulaOneServer/Formula.db-shm | Bin 0 -> 32768 bytes .../FormulaOneServer/Formula.db-wal | 0 ExternalAPI.Furiax/FormulaOneServer/Program.cs | 5 ++++- ExternalAPI.Furiax/FormulaUI/vite.config.js | 7 ------- ExternalAPI.Furiax/package-lock.json | 6 ++++++ 26 files changed, 59 insertions(+), 20 deletions(-) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/.gitignore (100%) create mode 100644 ExternalAPI.Furiax/FormulaOneClient/CHANGELOG.md create mode 100644 ExternalAPI.Furiax/FormulaOneClient/FormulaOneClient.esproj rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/README.md (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/eslint.config.js (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/index.html (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/package-lock.json (99%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/package.json (95%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/public/vite.svg (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/App.css (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/App.jsx (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/Body.jsx (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/Driver.jsx (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/Header.jsx (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/assets/flag.png (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/assets/logo.png (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/assets/react.svg (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/index.css (100%) rename ExternalAPI.Furiax/{FormulaUI => FormulaOneClient}/src/main.jsx (100%) create mode 100644 ExternalAPI.Furiax/FormulaOneClient/vite.config.js create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm create mode 100644 ExternalAPI.Furiax/FormulaOneServer/Formula.db-wal delete mode 100644 ExternalAPI.Furiax/FormulaUI/vite.config.js create mode 100644 ExternalAPI.Furiax/package-lock.json diff --git a/ExternalAPI.Furiax/ExternalAPI.Furiax.sln b/ExternalAPI.Furiax/ExternalAPI.Furiax.sln index 82af187..c9ed920 100644 --- a/ExternalAPI.Furiax/ExternalAPI.Furiax.sln +++ b/ExternalAPI.Furiax/ExternalAPI.Furiax.sln @@ -1,11 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.12.35707.178 d17.12 +VisualStudioVersion = 17.12.35707.178 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormulaOneServer", "FormulaOneServer\FormulaOneServer.csproj", "{DDC111E3-B359-4008-B827-9146F185389A}" EndProject -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "FormulaUI", "FormulaUI\FormulaUI.njsproj", "{D176686F-845B-4CF8-90AF-3C0923F0A3C1}" +Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "FormulaOneClient", "FormulaOneClient\FormulaOneClient.esproj", "{2691435F-CE8D-4BAB-A7E6-0A218552B93A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -17,10 +17,12 @@ Global {DDC111E3-B359-4008-B827-9146F185389A}.Debug|Any CPU.Build.0 = Debug|Any CPU {DDC111E3-B359-4008-B827-9146F185389A}.Release|Any CPU.ActiveCfg = Release|Any CPU {DDC111E3-B359-4008-B827-9146F185389A}.Release|Any CPU.Build.0 = Release|Any CPU - {D176686F-845B-4CF8-90AF-3C0923F0A3C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D176686F-845B-4CF8-90AF-3C0923F0A3C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D176686F-845B-4CF8-90AF-3C0923F0A3C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D176686F-845B-4CF8-90AF-3C0923F0A3C1}.Release|Any CPU.Build.0 = Release|Any CPU + {2691435F-CE8D-4BAB-A7E6-0A218552B93A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2691435F-CE8D-4BAB-A7E6-0A218552B93A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2691435F-CE8D-4BAB-A7E6-0A218552B93A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {2691435F-CE8D-4BAB-A7E6-0A218552B93A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2691435F-CE8D-4BAB-A7E6-0A218552B93A}.Release|Any CPU.Build.0 = Release|Any CPU + {2691435F-CE8D-4BAB-A7E6-0A218552B93A}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ExternalAPI.Furiax/FormulaUI/.gitignore b/ExternalAPI.Furiax/FormulaOneClient/.gitignore similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/.gitignore rename to ExternalAPI.Furiax/FormulaOneClient/.gitignore diff --git a/ExternalAPI.Furiax/FormulaOneClient/CHANGELOG.md b/ExternalAPI.Furiax/FormulaOneClient/CHANGELOG.md new file mode 100644 index 0000000..a7f5a99 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneClient/CHANGELOG.md @@ -0,0 +1,12 @@ +This file explains how Visual Studio created the project. + +The following tools were used to generate this project: +- create-vite + +The following steps were used to generate this project: +- Create react project with create-vite: `npm init --yes vite@latest formulaoneclient -- --template=react`. +- Updating vite.config.js with port. +- Create project file (`formulaoneclient.esproj`). +- Create `launch.json` to enable debugging. +- Add project to solution. +- Write this file. diff --git a/ExternalAPI.Furiax/FormulaOneClient/FormulaOneClient.esproj b/ExternalAPI.Furiax/FormulaOneClient/FormulaOneClient.esproj new file mode 100644 index 0000000..b1caa53 --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneClient/FormulaOneClient.esproj @@ -0,0 +1,11 @@ + + + npm run dev + src\ + Jest + + false + + $(MSBuildProjectDirectory)\dist + + \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaUI/README.md b/ExternalAPI.Furiax/FormulaOneClient/README.md similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/README.md rename to ExternalAPI.Furiax/FormulaOneClient/README.md diff --git a/ExternalAPI.Furiax/FormulaUI/eslint.config.js b/ExternalAPI.Furiax/FormulaOneClient/eslint.config.js similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/eslint.config.js rename to ExternalAPI.Furiax/FormulaOneClient/eslint.config.js diff --git a/ExternalAPI.Furiax/FormulaUI/index.html b/ExternalAPI.Furiax/FormulaOneClient/index.html similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/index.html rename to ExternalAPI.Furiax/FormulaOneClient/index.html diff --git a/ExternalAPI.Furiax/FormulaUI/package-lock.json b/ExternalAPI.Furiax/FormulaOneClient/package-lock.json similarity index 99% rename from ExternalAPI.Furiax/FormulaUI/package-lock.json rename to ExternalAPI.Furiax/FormulaOneClient/package-lock.json index 932d1b7..2d982cf 100644 --- a/ExternalAPI.Furiax/FormulaUI/package-lock.json +++ b/ExternalAPI.Furiax/FormulaOneClient/package-lock.json @@ -1,11 +1,11 @@ { - "name": "formulaui", + "name": "formulaoneclient", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "formulaui", + "name": "formulaoneclient", "version": "0.0.0", "dependencies": { "react": "^18.3.1", @@ -1952,9 +1952,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.86", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.86.tgz", - "integrity": "sha512-/D7GAAaCRBQFBBcop6SfAAGH37djtpWkOuYhyAajw0l5vsfeSsUQYxaFPwr1c/mC/flARCDdKFo5gpFqNI+18w==", + "version": "1.5.87", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.87.tgz", + "integrity": "sha512-mPFwmEWmRivw2F8x3w3l2m6htAUN97Gy0kwpO++2m9iT1Gt8RCFVUfv9U/sIbHJ6rY4P6/ooqFL/eL7ock+pPg==", "dev": true, "license": "ISC" }, diff --git a/ExternalAPI.Furiax/FormulaUI/package.json b/ExternalAPI.Furiax/FormulaOneClient/package.json similarity index 95% rename from ExternalAPI.Furiax/FormulaUI/package.json rename to ExternalAPI.Furiax/FormulaOneClient/package.json index 07dbcba..86e5692 100644 --- a/ExternalAPI.Furiax/FormulaUI/package.json +++ b/ExternalAPI.Furiax/FormulaOneClient/package.json @@ -1,5 +1,5 @@ { - "name": "formulaui", + "name": "formulaoneclient", "private": true, "version": "0.0.0", "type": "module", diff --git a/ExternalAPI.Furiax/FormulaUI/public/vite.svg b/ExternalAPI.Furiax/FormulaOneClient/public/vite.svg similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/public/vite.svg rename to ExternalAPI.Furiax/FormulaOneClient/public/vite.svg diff --git a/ExternalAPI.Furiax/FormulaUI/src/App.css b/ExternalAPI.Furiax/FormulaOneClient/src/App.css similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/App.css rename to ExternalAPI.Furiax/FormulaOneClient/src/App.css diff --git a/ExternalAPI.Furiax/FormulaUI/src/App.jsx b/ExternalAPI.Furiax/FormulaOneClient/src/App.jsx similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/App.jsx rename to ExternalAPI.Furiax/FormulaOneClient/src/App.jsx diff --git a/ExternalAPI.Furiax/FormulaUI/src/Body.jsx b/ExternalAPI.Furiax/FormulaOneClient/src/Body.jsx similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/Body.jsx rename to ExternalAPI.Furiax/FormulaOneClient/src/Body.jsx diff --git a/ExternalAPI.Furiax/FormulaUI/src/Driver.jsx b/ExternalAPI.Furiax/FormulaOneClient/src/Driver.jsx similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/Driver.jsx rename to ExternalAPI.Furiax/FormulaOneClient/src/Driver.jsx diff --git a/ExternalAPI.Furiax/FormulaUI/src/Header.jsx b/ExternalAPI.Furiax/FormulaOneClient/src/Header.jsx similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/Header.jsx rename to ExternalAPI.Furiax/FormulaOneClient/src/Header.jsx diff --git a/ExternalAPI.Furiax/FormulaUI/src/assets/flag.png b/ExternalAPI.Furiax/FormulaOneClient/src/assets/flag.png similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/assets/flag.png rename to ExternalAPI.Furiax/FormulaOneClient/src/assets/flag.png diff --git a/ExternalAPI.Furiax/FormulaUI/src/assets/logo.png b/ExternalAPI.Furiax/FormulaOneClient/src/assets/logo.png similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/assets/logo.png rename to ExternalAPI.Furiax/FormulaOneClient/src/assets/logo.png diff --git a/ExternalAPI.Furiax/FormulaUI/src/assets/react.svg b/ExternalAPI.Furiax/FormulaOneClient/src/assets/react.svg similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/assets/react.svg rename to ExternalAPI.Furiax/FormulaOneClient/src/assets/react.svg diff --git a/ExternalAPI.Furiax/FormulaUI/src/index.css b/ExternalAPI.Furiax/FormulaOneClient/src/index.css similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/index.css rename to ExternalAPI.Furiax/FormulaOneClient/src/index.css diff --git a/ExternalAPI.Furiax/FormulaUI/src/main.jsx b/ExternalAPI.Furiax/FormulaOneClient/src/main.jsx similarity index 100% rename from ExternalAPI.Furiax/FormulaUI/src/main.jsx rename to ExternalAPI.Furiax/FormulaOneClient/src/main.jsx diff --git a/ExternalAPI.Furiax/FormulaOneClient/vite.config.js b/ExternalAPI.Furiax/FormulaOneClient/vite.config.js new file mode 100644 index 0000000..547f30f --- /dev/null +++ b/ExternalAPI.Furiax/FormulaOneClient/vite.config.js @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite'; +import plugin from '@vitejs/plugin-react'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [plugin()], + server: { + https: false, + host: 'localhost', + port: 60834, + } +}) \ No newline at end of file diff --git a/ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm b/ExternalAPI.Furiax/FormulaOneServer/Formula.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 //React page is running on localhost:/5176, adjust accordingly - { policy.WithOrigins("http://localhost:5176");}); + { + policy.WithOrigins("http://localhost:60834"); + }); + }); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); diff --git a/ExternalAPI.Furiax/FormulaUI/vite.config.js b/ExternalAPI.Furiax/FormulaUI/vite.config.js deleted file mode 100644 index 8b0f57b..0000000 --- a/ExternalAPI.Furiax/FormulaUI/vite.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' - -// https://vite.dev/config/ -export default defineConfig({ - plugins: [react()], -}) diff --git a/ExternalAPI.Furiax/package-lock.json b/ExternalAPI.Furiax/package-lock.json new file mode 100644 index 0000000..0788b8d --- /dev/null +++ b/ExternalAPI.Furiax/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "ExternalAPI.Furiax", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} From ad4e60dd1132146454866ba6b7af78b7a69eefad Mon Sep 17 00:00:00 2001 From: Carl M Date: Thu, 23 Jan 2025 21:59:48 +0100 Subject: [PATCH 14/14] Update ReadMe.md --- ExternalAPI.Furiax/ReadMe.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ExternalAPI.Furiax/ReadMe.md b/ExternalAPI.Furiax/ReadMe.md index e44047b..83450ac 100644 --- a/ExternalAPI.Furiax/ReadMe.md +++ b/ExternalAPI.Furiax/ReadMe.md @@ -9,4 +9,11 @@ I have chosen to create an API that contains all F1 drivers for the 2025 season ## Goals - Practice creating ASP.NET Web APIs. -- Build a React frontend to get used to working with components, `useState`, and `useEffect`. +- Build a React frontend to get used to working with components, `useState`, and `useEffect`. + +## Difficulties +- Making the API in VS22 was easy, and creating the React app in VSC was also straightforward. However, getting them both to run simultaneously in VS22 was quite a journey. + For some reason, the React code from VSC wasn't showing up in VS22, so I couldn't make it a startup project. + I had to use Google and ChatGPT's help to finally make it work. +- Experienced some problems getting CORS to work. +