From 235cb2401af32e683ceb0469ee03653c9bb7bfb1 Mon Sep 17 00:00:00 2001 From: Ben Parsons <9parsonsb@gmail.com> Date: Fri, 10 May 2024 22:26:44 +1000 Subject: [PATCH] Add Shipyard & Fix ShipLocker Update File handling Update Journal handling Update README.md --- Pulsar/Features/EventsHub.cs | 5 + Pulsar/Features/FileHandlerService.cs | 32 +- Pulsar/Features/FileWatcherService.cs | 7 +- .../ModulesInfo/ModulesInfoService.cs | 29 +- .../Features/ShipLocker/ShipLockerService.cs | 52 +- Pulsar/Features/Shipyard/ShipyardService.cs | 47 ++ Pulsar/Features/Status/StatusService.cs | 4 +- Pulsar/Pulsar.csproj | 2 + Pulsar/PulsarServiceRegistry.cs | 4 + Pulsar/WebApp/package-lock.json | 544 ++++-------------- Pulsar/WebApp/package.json | 33 +- Pulsar/WebApp/src/lib/Debug.svelte | 5 +- Pulsar/WebApp/src/lib/MissionStack.svelte | 5 +- Pulsar/WebApp/src/lib/Ship.svelte | 5 +- Pulsar/WebApp/src/lib/Status.svelte | 8 +- Pulsar/WebApp/src/routes/+layout.svelte | 2 +- README.md | 1 + 17 files changed, 255 insertions(+), 530 deletions(-) create mode 100644 Pulsar/Features/Shipyard/ShipyardService.cs diff --git a/Pulsar/Features/EventsHub.cs b/Pulsar/Features/EventsHub.cs index 10042eb..5efe0d1 100644 --- a/Pulsar/Features/EventsHub.cs +++ b/Pulsar/Features/EventsHub.cs @@ -2,6 +2,7 @@ namespace Pulsar.Features; using Observatory.Framework.Files; using Observatory.Framework.Files.Journal; +using Observatory.Framework.Files.Journal.Odyssey; public class EventsHub : Hub { @@ -24,6 +25,8 @@ public class EventsHub : Hub public async Task CargoUpdated(CargoFile cargo) => await Clients.All.CargoUpdated(cargo); public async Task BackpackUpdated(BackpackFile backpack) => await Clients.All.BackpackUpdated(backpack); + + public async Task ShipLockerUpdated(ShipLockerMaterials shipLocker) => await Clients.All.ShipLockerUpdated(shipLocker); } public interface IEventsHub @@ -47,4 +50,6 @@ public interface IEventsHub Task CargoUpdated(CargoFile cargo); Task BackpackUpdated(BackpackFile backpack); + + Task ShipLockerUpdated(ShipLockerMaterials shipLocker); } \ No newline at end of file diff --git a/Pulsar/Features/FileHandlerService.cs b/Pulsar/Features/FileHandlerService.cs index 01198e4..2d70e84 100644 --- a/Pulsar/Features/FileHandlerService.cs +++ b/Pulsar/Features/FileHandlerService.cs @@ -1,8 +1,6 @@ using Observatory.Framework.Files; +using Observatory.Framework.Files.Journal; using Observatory.Framework.Files.Journal.Odyssey; -using Pulsar.Features.ModulesInfo; -using Pulsar.Features.ShipLocker; - namespace Pulsar.Features; public interface IFileHandler @@ -23,6 +21,8 @@ public class FileHandlerService( public static readonly string ModulesFileName = "Modules.json"; public static readonly string JournalLogFileNameRegEx = @"Journal\.\d\d\d\d-\d\d-\d\dT\d+\.\d\d\.log"; public static readonly string JournalLogFileName = "Journal.*.log"; + public static readonly string JournalLogFileNameStart = "Journal."; + public static readonly string JournalLogFileNameEnd = ".log"; public static readonly string RouteFileName = "Route.json"; public static readonly string CargoFileName = "Cargo.json"; public static readonly string BackpackFileName = "Backpack.json"; @@ -37,7 +37,7 @@ public class FileHandlerService( OutfittingFileName, ShipyardFileName, ModulesFileName, - JournalLogFileNameRegEx, + JournalLogFileNameStart, RouteFileName, CargoFileName, BackpackFileName, @@ -51,8 +51,14 @@ public class FileHandlerService( { StatusFileName, typeof(IJournalHandler) }, { ModulesInfoFileName, typeof(IJournalHandler) }, { ShipLockerFileName, typeof(IJournalHandler) }, - { ShipLockerFileName, typeof(IJournalHandler) }, + { ShipyardFileName, typeof(IJournalHandler) }, + { MarketFileName, typeof(IJournalHandler) }, + { NavRouteFileName, typeof(IJournalHandler) }, { CargoFileName, typeof(IJournalHandler) }, + { BackpackFileName, typeof(IJournalHandler) }, + { RouteFileName, typeof(IJournalHandler) }, + { OutfittingFileName, typeof(IJournalHandler) }, + { JournalLogFileNameStart, typeof(IJournalHandler>) } }; public async Task HandleFile(string path) @@ -70,13 +76,19 @@ public class FileHandlerService( return; } - if (Handlers.TryGetValue(match, out var type)) + if (!Handlers.TryGetValue(match, out var type)) { - logger.LogInformation("Handling file {FileName} with Type {Type}", fileName); - (serviceProvider.GetRequiredService(type) as IJournalHandler)?.HandleFile(path); + logger.LogInformation("File {FileName} was not handled", fileName); return; } - - logger.LogInformation("File {FileName} was not handled", fileName); + + if (serviceProvider.GetRequiredService(type) is not IJournalHandler handler) + { + logger.LogWarning("Handler for {FileName} is not available", fileName); + return; + } + + logger.LogInformation("Handling file {FileName} with Type {Type}", fileName, handler.GetType().ToString()); + await handler.HandleFile(path); } } \ No newline at end of file diff --git a/Pulsar/Features/FileWatcherService.cs b/Pulsar/Features/FileWatcherService.cs index cdaf26f..401d2e5 100644 --- a/Pulsar/Features/FileWatcherService.cs +++ b/Pulsar/Features/FileWatcherService.cs @@ -26,7 +26,10 @@ public class FileWatcherService(IOptions options, IFileHand { foreach (var file in watcher.GetDirectoryContents("")) { - if (!file.Name.EndsWith(".json") || file.IsDirectory) continue; + if (file.IsDirectory || !file.Name.EndsWith(".json") && !(file.Name.StartsWith(FileHandlerService.JournalLogFileNameStart) && file.Name.EndsWith(FileHandlerService.JournalLogFileNameEnd))) + { + continue; + } var existing = FileDates.GetOrAdd(file.PhysicalPath, file.LastModified); @@ -40,7 +43,7 @@ public class FileWatcherService(IOptions options, IFileHand private void Watch() { - watcher.Watch("**/*.json").RegisterChangeCallback(HandleFileChanged, null); + watcher.Watch("*.*").RegisterChangeCallback(HandleFileChanged, null); } public Task StopAsync(CancellationToken cancellationToken) diff --git a/Pulsar/Features/ModulesInfo/ModulesInfoService.cs b/Pulsar/Features/ModulesInfo/ModulesInfoService.cs index 2c6b7b0..f787d7a 100644 --- a/Pulsar/Features/ModulesInfo/ModulesInfoService.cs +++ b/Pulsar/Features/ModulesInfo/ModulesInfoService.cs @@ -11,34 +11,9 @@ public class ModulesInfoService( { public string FileName => FileHandlerService.ModulesInfoFileName; - public bool ValidateFile(string filePath) - { - if (!File.Exists(filePath)) - { - logger.LogWarning("Journal file {JournalFile} does not exist", filePath); - return false; - } - - var fileInfo = new FileInfo(filePath); - - if (!string.Equals(fileInfo.Name, FileName, StringComparison.InvariantCultureIgnoreCase)) - { - logger.LogWarning("Journal file {name} is not valid"); - return false; - } - - if (fileInfo.Length == 0) - { - logger.LogWarning("Journal file {name} is empty", filePath); - return false; - } - - return true; - } - public async Task HandleFile(string filePath) { - if (!ValidateFile(filePath)) + if (!FileHelper.ValidateFile(filePath)) { return; } @@ -59,7 +34,7 @@ public class ModulesInfoService( { var moduleInfoFile = Path.Combine(options.Value.JournalDirectory, FileName); - if (!ValidateFile(moduleInfoFile)) + if (!FileHelper.ValidateFile(moduleInfoFile)) { return new ModuleInfoFile(); } diff --git a/Pulsar/Features/ShipLocker/ShipLockerService.cs b/Pulsar/Features/ShipLocker/ShipLockerService.cs index 99014db..67f67ca 100644 --- a/Pulsar/Features/ShipLocker/ShipLockerService.cs +++ b/Pulsar/Features/ShipLocker/ShipLockerService.cs @@ -4,43 +4,45 @@ using Observatory.Framework.Files.Journal.Odyssey; public interface IShipLockerService : IJournalHandler; -public class ShipLockerService(ILogger logger) +public class ShipLockerService(ILogger logger, IOptions options, + IEventHubContext hub) : IShipLockerService { public string FileName => FileHandlerService.ShipLockerFileName; - public bool ValidateFile(string filePath) + public async Task Get() { - if (!File.Exists(filePath)) + var shipLockerFile = Path.Combine(options.Value.JournalDirectory, FileName); + + if (!FileHelper.ValidateFile(shipLockerFile)) { - logger.LogWarning("Journal file {JournalFile} does not exist", filePath); - return false; + return new ShipLockerMaterials(); } - var fileInfo = new FileInfo(filePath); + await using var file = File.Open(shipLockerFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + var shipLocker = await JsonSerializer.DeserializeAsync(file); + if (shipLocker != null) return shipLocker; - if (!string.Equals(fileInfo.Name, FileName, StringComparison.InvariantCultureIgnoreCase)) - { - logger.LogWarning("Journal file {name} is not valid"); - return false; - } - - if (fileInfo.Length == 0) - { - logger.LogWarning("Journal file {name} is empty", filePath); - return false; - } - - return true; + logger.LogWarning("Failed to deserialize ship locker file {ShipLockerFile}", shipLockerFile); + return new ShipLockerMaterials(); } - public Task Get() + public async Task HandleFile(string filePath) { - throw new NotImplementedException(); - } + if (!FileHelper.ValidateFile(filePath)) + { + return; + } - public Task HandleFile(string filePath) - { - throw new NotImplementedException(); + var file = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + var shipLocker = await JsonSerializer.DeserializeAsync(file); + + if (shipLocker == null) + { + logger.LogWarning("Failed to deserialize status file {FilePath}", filePath); + return; + } + + await hub.Clients.All.ShipLockerUpdated(shipLocker); } } \ No newline at end of file diff --git a/Pulsar/Features/Shipyard/ShipyardService.cs b/Pulsar/Features/Shipyard/ShipyardService.cs new file mode 100644 index 0000000..af85151 --- /dev/null +++ b/Pulsar/Features/Shipyard/ShipyardService.cs @@ -0,0 +1,47 @@ +using Observatory.Framework.Files; + +namespace Pulsar.Features.Shipyard; + +public interface IShipyardService : IJournalHandler; + +public class ShipyardService(ILogger logger, IOptions options, + IEventHubContext hub) : IShipyardService +{ + public string FileName => FileHandlerService.ShipyardFileName; + public async Task Get() + { + var shipyardFile = Path.Combine(options.Value.JournalDirectory, FileName); + + if (!FileHelper.ValidateFile(shipyardFile)) + { + return new ShipyardFile(); + } + + await using var file = File.Open(shipyardFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + var shipyard = await JsonSerializer.DeserializeAsync(file); + if (shipyard != null) return shipyard; + + logger.LogWarning("Failed to deserialize shipyard file {ShipyardFile}", shipyardFile); + return new ShipyardFile(); + } + + public async Task HandleFile(string path) + { + if (!FileHelper.ValidateFile(path)) + { + return; + } + + var file = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + var shipyard = await JsonSerializer.DeserializeAsync(file); + + if (shipyard == null) + { + logger.LogWarning("Failed to deserialize status file {FilePath}", path); + return; + } + + await hub.Clients.All.ShipyardUpdated(shipyard); + } + +} \ No newline at end of file diff --git a/Pulsar/Features/Status/StatusService.cs b/Pulsar/Features/Status/StatusService.cs index dc7bdaf..b2198a7 100644 --- a/Pulsar/Features/Status/StatusService.cs +++ b/Pulsar/Features/Status/StatusService.cs @@ -40,7 +40,7 @@ public class StatusService public async Task HandleFile(string filePath) { - if (!ValidateFile(filePath)) + if (!FileHelper.ValidateFile(filePath)) { return; } @@ -61,7 +61,7 @@ public class StatusService { var statusFile = Path.Combine(options.Value.JournalDirectory, FileName); - if (!ValidateFile(statusFile)) + if (!FileHelper.ValidateFile(statusFile)) { return new Status(); } diff --git a/Pulsar/Pulsar.csproj b/Pulsar/Pulsar.csproj index fdc767b..3f591e8 100644 --- a/Pulsar/Pulsar.csproj +++ b/Pulsar/Pulsar.csproj @@ -19,6 +19,8 @@ + + \ No newline at end of file diff --git a/Pulsar/PulsarServiceRegistry.cs b/Pulsar/PulsarServiceRegistry.cs index 04ee0d5..1652320 100644 --- a/Pulsar/PulsarServiceRegistry.cs +++ b/Pulsar/PulsarServiceRegistry.cs @@ -4,6 +4,8 @@ using Pulsar.Features; using Pulsar.Features.Cargo; using Pulsar.Features.ModulesInfo; using Pulsar.Features.Journal; +using Pulsar.Features.ShipLocker; +using Pulsar.Features.Shipyard; namespace Pulsar; @@ -17,5 +19,7 @@ public class PulsarServiceRegistry : ServiceRegistry For().Use(); For().Use(); For().Use(); + For().Use(); + For().Use(); } } \ No newline at end of file diff --git a/Pulsar/WebApp/package-lock.json b/Pulsar/WebApp/package-lock.json index effd2fb..01fac8b 100644 --- a/Pulsar/WebApp/package-lock.json +++ b/Pulsar/WebApp/package-lock.json @@ -8,22 +8,21 @@ "name": "pulsar-web", "version": "0.0.1", "devDependencies": { - "@biomejs/biome": "1.6.4", + "@biomejs/biome": "^1.7.3", "@microsoft/signalr": "^8.0.0", - "@playwright/test": "^1.28.1", + "@playwright/test": "^1.44.0", "@sveltejs/adapter-static": "^3.0.1", - "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0", - "@types/eslint": "^8.56.7", - "eslint-plugin-svelte": "^2.36.0", - "globals": "^15.0.0", - "sass": "^1.75.0", - "svelte": "^5.0.0-next.121", - "svelte-check": "^3.6.0", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "typescript-eslint": "^7.5.0", - "vite": "^5.0.3" + "@sveltejs/kit": "^2.5.7", + "@sveltejs/vite-plugin-svelte": "next", + "@sveltestack/svelte-query": "^1.6.0", + "eslint-plugin-svelte": "^2.39.0", + "globals": "^15.2.0", + "sass": "^1.77.0", + "svelte": "^5.0.0-next.126", + "svelte-check": "^3.7.1", + "tslib": "^2.6.2", + "typescript": "^5.4.5", + "vite": "^5.2.11" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -50,9 +49,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.6.4.tgz", - "integrity": "sha512-3groVd2oWsLC0ZU+XXgHSNbq31lUcOCBkCcA7sAQGBopHcmL+jmmdoWlY3S61zIh+f2mqQTQte1g6PZKb3JJjA==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.7.3.tgz", + "integrity": "sha512-ogFQI+fpXftr+tiahA6bIXwZ7CSikygASdqMtH07J2cUzrpjyTMVc9Y97v23c7/tL1xCZhM+W9k4hYIBm7Q6cQ==", "dev": true, "hasInstallScript": true, "bin": { @@ -66,20 +65,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "1.6.4", - "@biomejs/cli-darwin-x64": "1.6.4", - "@biomejs/cli-linux-arm64": "1.6.4", - "@biomejs/cli-linux-arm64-musl": "1.6.4", - "@biomejs/cli-linux-x64": "1.6.4", - "@biomejs/cli-linux-x64-musl": "1.6.4", - "@biomejs/cli-win32-arm64": "1.6.4", - "@biomejs/cli-win32-x64": "1.6.4" + "@biomejs/cli-darwin-arm64": "1.7.3", + "@biomejs/cli-darwin-x64": "1.7.3", + "@biomejs/cli-linux-arm64": "1.7.3", + "@biomejs/cli-linux-arm64-musl": "1.7.3", + "@biomejs/cli-linux-x64": "1.7.3", + "@biomejs/cli-linux-x64-musl": "1.7.3", + "@biomejs/cli-win32-arm64": "1.7.3", + "@biomejs/cli-win32-x64": "1.7.3" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.6.4.tgz", - "integrity": "sha512-2WZef8byI9NRzGajGj5RTrroW9BxtfbP9etigW1QGAtwu/6+cLkdPOWRAs7uFtaxBNiKFYA8j/BxV5zeAo5QOQ==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.7.3.tgz", + "integrity": "sha512-eDvLQWmGRqrPIRY7AIrkPHkQ3visEItJKkPYSHCscSDdGvKzYjmBJwG1Gu8+QC5ed6R7eiU63LEC0APFBobmfQ==", "cpu": [ "arm64" ], @@ -93,9 +92,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.6.4.tgz", - "integrity": "sha512-uo1zgM7jvzcoDpF6dbGizejDLCqNpUIRkCj/oEK0PB0NUw8re/cn1EnxuOLZqDpn+8G75COLQTOx8UQIBBN/Kg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.7.3.tgz", + "integrity": "sha512-JXCaIseKRER7dIURsVlAJacnm8SG5I0RpxZ4ya3dudASYUc68WGl4+FEN03ABY3KMIq7hcK1tzsJiWlmXyosZg==", "cpu": [ "x64" ], @@ -109,9 +108,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.6.4.tgz", - "integrity": "sha512-wAOieaMNIpLrxGc2/xNvM//CIZg7ueWy3V5A4T7gDZ3OL/Go27EKE59a+vMKsBCYmTt7jFl4yHz0TUkUbodA/w==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.7.3.tgz", + "integrity": "sha512-phNTBpo7joDFastnmZsFjYcDYobLTx4qR4oPvc9tJ486Bd1SfEVPHEvJdNJrMwUQK56T+TRClOQd/8X1nnjA9w==", "cpu": [ "arm64" ], @@ -125,9 +124,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.6.4.tgz", - "integrity": "sha512-Hp8Jwt6rjj0wCcYAEN6/cfwrrPLLlGOXZ56Lei4Pt4jy39+UuPeAVFPeclrrCfxyL1wQ2xPrhd/saTHSL6DoJg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.7.3.tgz", + "integrity": "sha512-c8AlO45PNFZ1BYcwaKzdt46kYbuP6xPGuGQ6h4j3XiEDpyseRRUy/h+6gxj07XovmyxKnSX9GSZ6nVbZvcVUAw==", "cpu": [ "arm64" ], @@ -141,9 +140,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.6.4.tgz", - "integrity": "sha512-qTWhuIw+/ePvOkjE9Zxf5OqSCYxtAvcTJtVmZT8YQnmY2I62JKNV2m7tf6O5ViKZUOP0mOQ6NgqHKcHH1eT8jw==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.7.3.tgz", + "integrity": "sha512-vnedYcd5p4keT3iD48oSKjOIRPYcjSNNbd8MO1bKo9ajg3GwQXZLAH+0Cvlr+eMsO67/HddWmscSQwTFrC/uPA==", "cpu": [ "x64" ], @@ -157,9 +156,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.6.4.tgz", - "integrity": "sha512-wqi0hr8KAx5kBO0B+m5u8QqiYFFBJOSJVSuRqTeGWW+GYLVUtXNidykNqf1JsW6jJDpbkSp2xHKE/bTlVaG2Kg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.7.3.tgz", + "integrity": "sha512-UdEHKtYGWEX3eDmVWvQeT+z05T9/Sdt2+F/7zmMOFQ7boANeX8pcO6EkJPK3wxMudrApsNEKT26rzqK6sZRTRA==", "cpu": [ "x64" ], @@ -173,9 +172,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.6.4.tgz", - "integrity": "sha512-Wp3FiEeF6v6C5qMfLkHwf4YsoNHr/n0efvoC8jCKO/kX05OXaVExj+1uVQ1eGT7Pvx0XVm/TLprRO0vq/V6UzA==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.7.3.tgz", + "integrity": "sha512-unNCDqUKjujYkkSxs7gFIfdasttbDC4+z0kYmcqzRk6yWVoQBL4dNLcCbdnJS+qvVDNdI9rHp2NwpQ0WAdla4Q==", "cpu": [ "arm64" ], @@ -189,9 +188,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.6.4.tgz", - "integrity": "sha512-mz183Di5hTSGP7KjNWEhivcP1wnHLGmOxEROvoFsIxMYtDhzJDad4k5gI/1JbmA0xe4n52vsgqo09tBhrMT/Zg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.7.3.tgz", + "integrity": "sha512-ZmByhbrnmz/UUFYB622CECwhKIPjJLLPr5zr3edhu04LzbfcOrz16VYeNq5dpO1ADG70FORhAJkaIGdaVBG00w==", "cpu": [ "x64" ], @@ -592,6 +591,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, + "peer": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -779,12 +779,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz", - "integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.44.0.tgz", + "integrity": "sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==", "dev": true, "dependencies": { - "playwright": "1.43.1" + "playwright": "1.44.0" }, "bin": { "playwright": "cli.js" @@ -1004,15 +1004,15 @@ } }, "node_modules/@sveltejs/kit": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.5.5.tgz", - "integrity": "sha512-ULe3PB00q4+wYRL+IS5FDPsCEVnhEITofm7b9Yz8malcH3r1SAnW/JJ6T13hIMeu8QNRIuVQWo+P4+2VklbnLQ==", + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.5.7.tgz", + "integrity": "sha512-6uedTzrb7nQrw6HALxnPrPaXdIN2jJJTzTIl96Z3P5NiG+OAfpdPbrWrvkJ3GN4CfWqrmU4dJqwMMRMTD/C7ow==", "dev": true, "hasInstallScript": true, "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^0.6.0", - "devalue": "^4.3.2", + "devalue": "^5.0.0", "esm-env": "^1.0.0", "import-meta-resolve": "^4.0.0", "kleur": "^4.1.5", @@ -1086,260 +1086,38 @@ "svelte": "^3.19.0 || ^4.0.0" } }, + "node_modules/@sveltestack/svelte-query": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sveltestack/svelte-query/-/svelte-query-1.6.0.tgz", + "integrity": "sha512-C0wWuh6av1zu3Pzwrg6EQmX3BhDZQ4gMAdYu6Tfv4bjbEZTB00uEDz52z92IZdONh+iUKuyo0xRZ2e16k2Xifg==", + "dev": true, + "peerDependencies": { + "broadcast-channel": "^4.5.0" + }, + "peerDependenciesMeta": { + "broadcast-channel": { + "optional": true + } + } + }, "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "dev": true }, - "node_modules/@types/eslint": { - "version": "8.56.9", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", - "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, - "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 - }, "node_modules/@types/pug": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", "dev": true }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "semver": "^7.6.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.6.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -1461,15 +1239,6 @@ "dequal": "^2.0.3" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/axobject-query": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", @@ -1704,23 +1473,11 @@ } }, "node_modules/devalue": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", - "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.0.0.tgz", + "integrity": "sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==", "dev": true }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1863,9 +1620,9 @@ } }, "node_modules/eslint-plugin-svelte": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.37.0.tgz", - "integrity": "sha512-H/2Gz7agYHEMEEzRuLYuCmAIdjuBnbhFG9hOK0yCdSBvvJGJMkjo+lR6j67OIvLOavgp4L7zA5LnDKi8WqdPhQ==", + "version": "2.39.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.39.0.tgz", + "integrity": "sha512-FXktBLXsrxbA+6ZvJK2z/sQOrUKyzSg3fNWK5h0reSCjr2fjAsc9ai/s/JvSl4Hgvz3nYVtTIMwarZH5RcB7BA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", @@ -1873,13 +1630,13 @@ "debug": "^4.3.4", "eslint-compat-utils": "^0.5.0", "esutils": "^2.0.3", - "known-css-properties": "^0.30.0", + "known-css-properties": "^0.31.0", "postcss": "^8.4.38", "postcss-load-config": "^3.1.4", "postcss-safe-parser": "^6.0.0", "postcss-selector-parser": "^6.0.16", "semver": "^7.6.0", - "svelte-eslint-parser": ">=0.34.0 <1.0.0" + "svelte-eslint-parser": ">=0.36.0 <1.0.0" }, "engines": { "node": "^14.17.0 || >=16.0.0" @@ -1889,7 +1646,7 @@ }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.95" + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.112" }, "peerDependenciesMeta": { "svelte": { @@ -2221,9 +1978,9 @@ } }, "node_modules/globals": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.0.0.tgz", - "integrity": "sha512-m/C/yR4mjO6pXDTm9/R/SpYTAIyaUB4EOzcaaMEl7mds7Mshct9GfejiJNQGjHHbdMPey13Kpu4TMbYi9ex1pw==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.2.0.tgz", + "integrity": "sha512-FQ5YwCHZM3nCmtb5FzEWwdUc9K5d3V/w9mzcz8iGD1gC/aOTHc6PouYu0kkKipNJqHAT7m51sqzQjEjIP+cK0A==", "dev": true, "engines": { "node": ">=18" @@ -2238,26 +1995,6 @@ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", "dev": true }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", @@ -2274,7 +2011,8 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "peer": true }, "node_modules/has-flag": { "version": "4.0.0", @@ -2291,6 +2029,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, + "peer": true, "engines": { "node": ">= 4" } @@ -2475,9 +2214,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.30.0.tgz", - "integrity": "sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.31.0.tgz", + "integrity": "sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==", "dev": true }, "node_modules/levn": { @@ -2666,7 +2405,8 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/node-fetch": { "version": "2.7.0", @@ -2797,15 +2537,6 @@ "node": ">=8" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -2825,12 +2556,12 @@ } }, "node_modules/playwright": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz", - "integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.0.tgz", + "integrity": "sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==", "dev": true, "dependencies": { - "playwright-core": "1.43.1" + "playwright-core": "1.44.0" }, "bin": { "playwright": "cli.js" @@ -2843,9 +2574,9 @@ } }, "node_modules/playwright-core": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz", - "integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.44.0.tgz", + "integrity": "sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -3164,9 +2895,9 @@ } }, "node_modules/sass": { - "version": "1.75.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", - "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.0.tgz", + "integrity": "sha512-eGj4HNfXqBWtSnvItNkn7B6icqH14i3CiCGbzMKs3BAPTq62pp9NBYsBgyN4cA+qssqo9r26lW4JSvlaUUWbgw==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -3238,15 +2969,6 @@ "node": ">= 10" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/sorcery": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", @@ -3323,9 +3045,9 @@ } }, "node_modules/svelte": { - "version": "5.0.0-next.121", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.121.tgz", - "integrity": "sha512-dWxr42t8wv6iUmgKrYDG9RwQd2lf3vF2+ACYT7ziDnLeYItPM4sABmM8ptMaYL8czwtqpNzfCsxQR7ShN5PS9A==", + "version": "5.0.0-next.126", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.126.tgz", + "integrity": "sha512-Qnxhf+LG/qxhXpYm6I5+o8msSFBba2QOfnybrOqWbbtQbgbfy4gDVr3p2IExCT4yPOSUcqZWJiiSPsMbCuVwtA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", @@ -3347,9 +3069,9 @@ } }, "node_modules/svelte-check": { - "version": "3.6.9", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.9.tgz", - "integrity": "sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.7.1.tgz", + "integrity": "sha512-U4uJoLCzmz2o2U33c7mPDJNhRYX/DNFV11XTUDlFxaKLsO7P+40gvJHMPpoRfa24jqZfST4/G9fGNcUGMO8NAQ==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", @@ -3369,9 +3091,9 @@ } }, "node_modules/svelte-eslint-parser": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.34.1.tgz", - "integrity": "sha512-9+uLA1pqI9AZioKVGJzYYmlOZWxfoCXSbAM9iaNm7H01XlYlzRTtJfZgl9o3StQGN41PfGJIbkKkfk3e/pHFfA==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.36.0.tgz", + "integrity": "sha512-/6YmUSr0FAVxW8dXNdIMydBnddPMHzaHirAZ7RrT21XYdgGGZMh0LQG6CZsvAFS4r2Y4ItUuCQc8TQ3urB30mQ==", "dev": true, "dependencies": { "eslint-scope": "^7.2.2", @@ -3387,7 +3109,7 @@ "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.94" + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.115" }, "peerDependenciesMeta": { "svelte": { @@ -3517,18 +3239,6 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -3574,32 +3284,6 @@ "node": ">=14.17" } }, - "node_modules/typescript-eslint": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.6.0.tgz", - "integrity": "sha512-LY6vH6F1l5jpGqRtU+uK4+mOecIb4Cd4kaz1hAiJrgnNiHUA8wiw8BkJyYS+MRLM69F1QuSKwtGlQqnGl1Rc6w==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "7.6.0", - "@typescript-eslint/parser": "7.6.0", - "@typescript-eslint/utils": "7.6.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", @@ -3636,9 +3320,9 @@ "dev": true }, "node_modules/vite": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz", - "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==", + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", "dev": true, "dependencies": { "esbuild": "^0.20.1", diff --git a/Pulsar/WebApp/package.json b/Pulsar/WebApp/package.json index 3fc862d..8438d77 100644 --- a/Pulsar/WebApp/package.json +++ b/Pulsar/WebApp/package.json @@ -12,26 +12,21 @@ "lint": "biomejs ." }, "devDependencies": { - "@biomejs/biome": "1.6.4", + "@biomejs/biome": "^1.7.3", "@microsoft/signalr": "^8.0.0", - "@playwright/test": "^1.28.1", + "@playwright/test": "^1.44.0", "@sveltejs/adapter-static": "^3.0.1", - "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0", - "@types/eslint": "^8.56.7", - "eslint-plugin-svelte": "^2.36.0", - "globals": "^15.0.0", - "sass": "^1.75.0", - "svelte": "^5.0.0-next.121", - "svelte-check": "^3.6.0", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "typescript-eslint": "^7.5.0", - "vite": "^5.0.3" - }, - "type": "module", - "dependencies": { "@sveltestack/svelte-query": "^1.6.0", - "axios": "^1.6.8" - } + "@sveltejs/kit": "^2.5.7", + "@sveltejs/vite-plugin-svelte": "next", + "eslint-plugin-svelte": "^2.39.0", + "globals": "^15.2.0", + "sass": "^1.77.0", + "svelte": "^5.0.0-next.126", + "svelte-check": "^3.7.1", + "tslib": "^2.6.2", + "typescript": "^5.4.5", + "vite": "^5.2.11" + }, + "type": "module" } diff --git a/Pulsar/WebApp/src/lib/Debug.svelte b/Pulsar/WebApp/src/lib/Debug.svelte index 68a9973..1db9e63 100644 --- a/Pulsar/WebApp/src/lib/Debug.svelte +++ b/Pulsar/WebApp/src/lib/Debug.svelte @@ -1,14 +1,13 @@ diff --git a/Pulsar/WebApp/src/routes/+layout.svelte b/Pulsar/WebApp/src/routes/+layout.svelte index 20882bc..d67f483 100644 --- a/Pulsar/WebApp/src/routes/+layout.svelte +++ b/Pulsar/WebApp/src/routes/+layout.svelte @@ -10,7 +10,7 @@ diff --git a/README.md b/README.md index 00d92b3..1428377 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ A Cross Platform Fork of Elite Observatory Core. - [ ] !System Exobiology Value - [ ] !Exobiology Scan info (+[Show Req. Disatance](https://github.com/EDCD/EDDI/blob/e28ef64a1d41c1e39485863aa362d207e8d36834/Utilities/Functions.cs#L128C1-L152C10) for next scan) - [ ] !Fuel/Jump Warning + - [ ] Material Tracking (Flag planets with materials, set goals, closest trader) [e.g.](https://github.com/jixxed/ed-odyssey-materials-helper) - [ ] Custom Sounds (on user-defined Events) - [ ] Mission Targets [Mission Stack Viewer](https://github.com/kaivalagi/EDMissionStackViewer) - [ ] Commodities Targets/Alerts (Commodity Above/Below value at current station)