From 3ecf4b6044db187a0e8fa6bcdd50ac9ee9b3d477 Mon Sep 17 00:00:00 2001 From: Freddie Date: Mon, 21 Sep 2026 20:17:27 -0700 Subject: [PATCH 1/9] Use a questIds func for Hope/Unity chore --- apps/frontend/data/tasks/11-midnight/12-0.ts | 61 +++++++------------- 1 file changed, 22 insertions(+), 39 deletions(-) diff --git a/apps/frontend/data/tasks/11-midnight/12-0.ts b/apps/frontend/data/tasks/11-midnight/12-0.ts index f73f73efc..e63bb8f04 100644 --- a/apps/frontend/data/tasks/11-midnight/12-0.ts +++ b/apps/frontend/data/tasks/11-midnight/12-0.ts @@ -96,45 +96,28 @@ export const midChores12_0: Task = { questReset: DbResetType.Weekly, customExpiryFunc: (char, scannedAt) => customResetPeriod(char, scannedAt, 1079, 2), decorationFunc: twoWeekDecorator, - subChoresAnyOrder: true, - subChores: [ - { - key: 'hope', - name: 'Hope in the Darkest Corners', - minimumLevel: 80, - maximumLevel: 89, - icon: iconLibrary.gameCandleLight, - questReset: DbResetType.Weekly, - questIds: [95468], - }, - { - key: 'unity', - name: 'Unity', - minimumLevel: 90, - showQuestName: true, - icon: aliasedIcons.planet, - questReset: DbResetType.Weekly, // TODO: weird 3 week garbage? - questIds: [ - 93890, // Midnight: Abundance - 93767, // Midnight: Arcantina - 94457, // Midnight: Battlegrounds - 93909, // Midnight: Delves - 93911, // Midnight: Dungeons - 93769, // Midnight: Housing - 93891, // Midnight: Legends of the Haranir - 96727, // Midnight: Offworld Showdowns - 93910, // Midnight: Prey - 93912, // Midnight: Raid - 95843, // Midnight: Ritual Sites - 93889, // Midnight: Saltheril's Soiree - 93892, // Midnight: Stormarion Assault - 98232, // Midnight: Vaults of Atal'Utek - 95842, // Midnight: Void Assaults - 93913, // Midnight: World Boss - 93766, // Midnight: World Quests - ], - }, - ], + questIds: (char) => + char.level < 90 + ? [95468] + : [ + 93890, // Midnight: Abundance + 93767, // Midnight: Arcantina + 94457, // Midnight: Battlegrounds + 93909, // Midnight: Delves + 93911, // Midnight: Dungeons + 93769, // Midnight: Housing + 93891, // Midnight: Legends of the Haranir + 96727, // Midnight: Offworld Showdowns + 93910, // Midnight: Prey + 93912, // Midnight: Raid + 95843, // Midnight: Ritual Sites + 93889, // Midnight: Saltheril's Soiree + 93892, // Midnight: Stormarion Assault + 98232, // Midnight: Vaults of Atal'Utek + 95842, // Midnight: Void Assaults + 93913, // Midnight: World Boss + 93766, // Midnight: World Quests + ], }, { key: 'midAbundance', From 46a928f1e31d17976fd2b7131152431e9ac0c1f3 Mon Sep 17 00:00:00 2001 From: Freddie Date: Mon, 21 Sep 2026 20:25:40 -0700 Subject: [PATCH 2/9] Add Chore.sumObjectives --- apps/frontend/data/tasks/11-midnight/12-0.ts | 1 + apps/frontend/types/tasks.ts | 9 ++++---- .../user-home/state/user/derived.svelte.ts | 23 ++++++++++++++----- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/apps/frontend/data/tasks/11-midnight/12-0.ts b/apps/frontend/data/tasks/11-midnight/12-0.ts index e63bb8f04..ac463afde 100644 --- a/apps/frontend/data/tasks/11-midnight/12-0.ts +++ b/apps/frontend/data/tasks/11-midnight/12-0.ts @@ -94,6 +94,7 @@ export const midChores12_0: Task = { name: 'Hope/Unity', icon: aliasedIcons.planet, questReset: DbResetType.Weekly, + sumObjectives: true, customExpiryFunc: (char, scannedAt) => customResetPeriod(char, scannedAt, 1079, 2), decorationFunc: twoWeekDecorator, questIds: (char) => diff --git a/apps/frontend/types/tasks.ts b/apps/frontend/types/tasks.ts index 379ffeec7..f1d408cfe 100644 --- a/apps/frontend/types/tasks.ts +++ b/apps/frontend/types/tasks.ts @@ -25,18 +25,19 @@ export type Chore = { icon?: Icon | string; accountWide?: boolean; alwaysStarted?: boolean; - noAlone?: boolean; - showQuestName?: boolean; - minimumLevel?: number; maximumLevel?: number; + minimumLevel?: number; + noAlone?: boolean; overrideNeed?: number; questCount?: number; questIds?: number[] | ((char: Character, chore?: Chore) => number[]); questReset?: DbResetType; questResetForced?: boolean; + requiredHolidays?: Holiday[]; + showQuestName?: boolean; subChoresAnyOrder?: boolean; subChores?: Chore[]; - requiredHolidays?: Holiday[]; + sumObjectives?: boolean; /** * Function to manually calculate progress diff --git a/apps/frontend/user-home/state/user/derived.svelte.ts b/apps/frontend/user-home/state/user/derived.svelte.ts index 6685f7b87..f71704574 100644 --- a/apps/frontend/user-home/state/user/derived.svelte.ts +++ b/apps/frontend/user-home/state/user/derived.svelte.ts @@ -697,9 +697,18 @@ export class DataUserDerived { charChore.status === QuestStatus.InProgress && charChore.quest?.objectives?.length > 0 ) { - const lastObjective = charChore.quest.objectives.at(-1); - charChore.progressCurrent = lastObjective.have; - charChore.progressTotal = lastObjective.need; + if (chore.sumObjectives) { + charChore.progressCurrent = 0; + charChore.progressTotal = 0; + for (const objective of charChore.quest.objectives) { + charChore.progressCurrent += objective.have; + charChore.progressTotal += objective.need; + } + } else { + const lastObjective = charChore.quest.objectives.at(-1); + charChore.progressCurrent = lastObjective.have; + charChore.progressTotal = lastObjective.need; + } } if ( @@ -721,9 +730,11 @@ export class DataUserDerived { charChore.status === QuestStatus.InProgress && charChore.quest.objectives?.length > 0 ) { - const lastObjective = charChore.quest.objectives.at(-1); - charChore.progressCurrent = lastObjective.have; - charChore.progressTotal = lastObjective.need; + if (!charChore.progressTotal) { + const lastObjective = charChore.quest.objectives.at(-1); + charChore.progressCurrent = lastObjective.have; + charChore.progressTotal = lastObjective.need; + } charChore.statusTexts = this.getObjectivesText(charChore.quest.objectives); } From f1090de6ba5fb0879b6b59282a176f7cc2e43680 Mon Sep 17 00:00:00 2001 From: Freddie Date: Wed, 23 Sep 2026 16:48:14 -0700 Subject: [PATCH 3/9] Hope/Unity chore should show quest name --- apps/frontend/data/tasks/11-midnight/12-0.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/frontend/data/tasks/11-midnight/12-0.ts b/apps/frontend/data/tasks/11-midnight/12-0.ts index ac463afde..16df6df2e 100644 --- a/apps/frontend/data/tasks/11-midnight/12-0.ts +++ b/apps/frontend/data/tasks/11-midnight/12-0.ts @@ -94,6 +94,7 @@ export const midChores12_0: Task = { name: 'Hope/Unity', icon: aliasedIcons.planet, questReset: DbResetType.Weekly, + showQuestName: true, sumObjectives: true, customExpiryFunc: (char, scannedAt) => customResetPeriod(char, scannedAt, 1079, 2), decorationFunc: twoWeekDecorator, From 7a8add021d969a1103b0552b38b54b48ca050418 Mon Sep 17 00:00:00 2001 From: Freddie Date: Thu, 1 Oct 2026 15:01:52 -0700 Subject: [PATCH 4/9] Rework JobRepository.AddJobsAsync to use a single bulk query --- .../Jobs/Data/DataConnectedRealmIndexJob.cs | 8 +++- apps/backend/Services/SchedulerService.cs | 3 +- .../csharp-lib/Repositories/JobRepository.cs | 43 ++++++++++++++++--- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/apps/backend/Jobs/Data/DataConnectedRealmIndexJob.cs b/apps/backend/Jobs/Data/DataConnectedRealmIndexJob.cs index c99cf210a..0607941a1 100644 --- a/apps/backend/Jobs/Data/DataConnectedRealmIndexJob.cs +++ b/apps/backend/Jobs/Data/DataConnectedRealmIndexJob.cs @@ -19,11 +19,17 @@ public override async Task Run(string[] data) var uri = GenerateUri(region, ApiNamespace.Dynamic, ApiPath); var result = await GetUriAsJsonAsync(uri, useLastModified: false); + var jobParams = new List(result.Data.ConnectedRealms.Count); foreach (var href in result.Data.ConnectedRealms) { var match = RealmIdRegex.Match(href.Href); - await JobRepository.AddJobAsync(JobPriority.Low, JobType.DataConnectedRealm, ((int)region).ToString(), match.Groups[1].Value); + jobParams.Add([ + ((int)region).ToString(), + match.Groups[1].Value + ]); } + + await JobRepository.AddJobsAsync(JobPriority.Low, JobType.DataConnectedRealm, jobParams); } } } diff --git a/apps/backend/Services/SchedulerService.cs b/apps/backend/Services/SchedulerService.cs index ba8279c79..c3bccbe61 100644 --- a/apps/backend/Services/SchedulerService.cs +++ b/apps/backend/Services/SchedulerService.cs @@ -119,7 +119,8 @@ protected override async void TimerCallback(object state) if (characterResults.Length > 0) { var resultData = characterResults - .Select(cr => JsonSerializer.Serialize(cr, _jsonSerializerOptions)); + .Select(cr => JsonSerializer.Serialize(cr, _jsonSerializerOptions)) + .ToList(); // Queue character jobs Logger.Information("Queueing {0} character job(s)", characterResults.Length); diff --git a/packages/csharp-lib/Repositories/JobRepository.cs b/packages/csharp-lib/Repositories/JobRepository.cs index d694d4bd7..43a4a2831 100644 --- a/packages/csharp-lib/Repositories/JobRepository.cs +++ b/packages/csharp-lib/Repositories/JobRepository.cs @@ -1,4 +1,5 @@ -using StackExchange.Redis; +using System.Text; +using StackExchange.Redis; using Wowthing.Lib.Contexts; using Wowthing.Lib.Enums; using Wowthing.Lib.Jobs; @@ -24,17 +25,46 @@ INSERT INTO queued_job (priority, type, data, data_hash) ON CONFLICT DO NOTHING"); } - public async Task AddJobsAsync(JobPriority priority, JobType type, IEnumerable datas) + public async Task AddJobsAsync(JobPriority priority, JobType type, List jobParams) { - foreach (var data in datas) + await using var context = await contextFactory.CreateDbContextAsync(); + + // EF Core still doesn't have any way to handle insert conflicts, build a raw SQL string + // https://github.com/dotnet/efcore/issues/16949 + var builder = new StringBuilder("INSERT INTO queued_job (priority, type, data, data_hash) VALUES "); + var parameters = new List + { + priority, + type + }; + + for (int i = 0; i < jobParams.Count; i++) { - await AddJobAsync(priority, type, data); + string[] data = jobParams[i]; + + string json = JsonSerializer.Serialize(data.EmptyIfNull(), jsonSerializerOptions); + string jsonHash = json.Sha256(); + parameters.Add(json); + parameters.Add(jsonHash); + + // 0 => 2, 1 => 4, etc + int paramIndex = (i + 1) * 2; + builder.Append($"(@p0, @p1, @p{paramIndex}, @p{paramIndex + 1})"); + + if (i < jobParams.Count - 1) + { + builder.Append(", "); + } } + + builder.Append(" ON CONFLICT DO NOTHING"); + + await context.Database.ExecuteSqlRawAsync(builder.ToString(), parameters); } - public async Task AddJobsAsync(JobPriority priority, JobType type, IEnumerable datas) + public async Task AddJobsAsync(JobPriority priority, JobType type, List jobParams) { - await AddJobsAsync(priority, type, datas.Select(d => new[] { d })); + await AddJobsAsync(priority, type, jobParams.Select(d => new[] { d }).ToList()); } public async Task AddImageJobAsync(ImageType imageType, int id, ImageFormat format, string url) @@ -70,6 +100,7 @@ public async Task CheckLastTime(string prefix, string suffix, TimeSpan max { await db.StringSetAsync(key, DateTimeOffset.Now.ToString("O"), maximumAge); } + return set; } From de336e271cb8c081e0307a4d69925443a49201db Mon Sep 17 00:00:00 2001 From: Freddie Date: Thu, 1 Oct 2026 17:12:48 -0700 Subject: [PATCH 5/9] Use sole campaign/questline progress stats for overall --- apps/frontend/utils/get-progress.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/frontend/utils/get-progress.ts b/apps/frontend/utils/get-progress.ts index cddb50008..1ca650abe 100644 --- a/apps/frontend/utils/get-progress.ts +++ b/apps/frontend/utils/get-progress.ts @@ -224,6 +224,12 @@ export default function getProgress( haveThis = questStatuses.at(-1); descriptionText[dataIndex] = `${haveQuests} / ${data.ids.length}`; + + // if there's only one campaign/questline, use its data for overall + if (datas.length === 1) { + total = data.ids.length; + have = haveQuests - (haveThis ? 1 : 0); + } } else if (group.type === 'item') { haveThis = data.ids.some((id) => character.getItemCount(id) > 0); } else if (group.type === 'dragon-racing') { From f5c19c01aeceec49773cc2c2f4296b81986d64a2 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 2 Oct 2026 17:53:34 -0700 Subject: [PATCH 6/9] Mark userStore and userQuestStore as deprecated --- apps/frontend/stores/user-quests.ts | 5 ++++- apps/frontend/stores/user.ts | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/frontend/stores/user-quests.ts b/apps/frontend/stores/user-quests.ts index 946072966..99e5af48c 100644 --- a/apps/frontend/stores/user-quests.ts +++ b/apps/frontend/stores/user-quests.ts @@ -5,8 +5,8 @@ import type { DateTime } from 'luxon'; import { userModifiedStore } from './user-modified'; import { WritableFancyStore } from '@/types/fancy-store'; import { UserQuestDataCharacterProgress, type UserQuestData } from '@/types/data'; -import parseApiTime from '@/utils/parse-api-time'; import { userState } from '@/user-home/state/user'; +import parseApiTime from '@/utils/parse-api-time'; export class UserQuestDataStore extends WritableFancyStore { get dataUrl(): string { @@ -100,4 +100,7 @@ export class UserQuestDataStore extends WritableFancyStore { } } +/** + * @deprecated use `userState` + */ export const userQuestStore = new UserQuestDataStore(); diff --git a/apps/frontend/stores/user.ts b/apps/frontend/stores/user.ts index 5ed8e75de..913f7a01e 100644 --- a/apps/frontend/stores/user.ts +++ b/apps/frontend/stores/user.ts @@ -613,4 +613,7 @@ export class UserDataStore extends WritableFancyStore { } } +/** + * @deprecated use `userState` + */ export const userStore = new UserDataStore(); From 73400f74ac2647d222d9afedf90769ad3568bd64 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 2 Oct 2026 18:26:49 -0700 Subject: [PATCH 7/9] TS config file tweaks --- apps/frontend/tsconfig.json | 3 +-- apps/frontend/vite.config.ts | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/frontend/tsconfig.json b/apps/frontend/tsconfig.json index 7ad5e9870..bb2d4cc18 100644 --- a/apps/frontend/tsconfig.json +++ b/apps/frontend/tsconfig.json @@ -4,13 +4,12 @@ "exclude": ["**/.*", "node_modules", "tmp"], "compileOnSave": false, "compilerOptions": { - "baseUrl": ".", "rootDir": ".", "lib": ["es2022", "dom", "dom.iterable"], "module": "es2022", "moduleResolution": "bundler", "paths": { - "@/*": ["*"] + "@/*": ["./*"] }, "target": "es2022", "declaration": false, diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index ff07e7576..d563ce87c 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -24,9 +24,9 @@ const config = defineConfig({ emitCss: production, preprocess: sveltePreprocess({ // it can't find the file in the same directrory otherwise, wtf - typescript: { - tsconfigFile: 'tsconfig.json', - }, + // typescript: { + // tsconfigFile: `./apps/frontend/tsconfig.json`, + // }, // scss: { // prependData: ` // @import 'scss/mixins.scss'; From 2aca5d1e7ed490e22ed70a8881ba4b2e1d3aa9a7 Mon Sep 17 00:00:00 2001 From: Freddie Date: Fri, 2 Oct 2026 18:33:15 -0700 Subject: [PATCH 8/9] Update JS packages --- apps/frontend/package-lock.json | 683 +++++++++++++++++++------------- apps/frontend/package.json | 42 +- 2 files changed, 422 insertions(+), 303 deletions(-) diff --git a/apps/frontend/package-lock.json b/apps/frontend/package-lock.json index 3aa26a14c..bd316444d 100644 --- a/apps/frontend/package-lock.json +++ b/apps/frontend/package-lock.json @@ -19,37 +19,37 @@ }, "devDependencies": { "@eslint/js": "^10.0.1", - "@iconify/json": "^2.2.456", - "@iconify/svelte": "^5.2.1", + "@iconify/json": "^2.2.537", + "@iconify/svelte": "^5.2.2", "@iconify/types": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@sveltejs/vite-plugin-svelte": "^7.3.1", "@tsconfig/svelte": "^5.0.8", - "@types/lodash": "^4.17.24", - "@types/luxon": "^3.7.1", + "@types/lodash": "^4.17.25", + "@types/luxon": "^3.7.6", "@types/node": "22.15.30", - "@typescript-eslint/eslint-plugin": "^8.57.2", - "@typescript-eslint/parser": "^8.57.2", - "autoprefixer": "^10.4.27", + "@typescript-eslint/eslint-plugin": "^8.71.0", + "@typescript-eslint/parser": "^8.71.0", + "autoprefixer": "^10.6.1", "bebop-tools": "^3.2.3", - "eslint": "^10.1.0", + "eslint": "^10.12.0", "eslint-config-prettier": "10.1.8", - "eslint-plugin-svelte": "^3.16.0", - "globals": "^17.4.0", + "eslint-plugin-svelte": "^3.23.0", + "globals": "^17.13.0", "idb": "^8.0.3", - "lodash": "^4.17.23", - "prettier": "^3.8.1", + "lodash": "^4.18.1", + "prettier": "^3.9.9", "prettier-plugin-svelte": "^3.5.1", "sass": "1.92.1", - "svelte": "^5.55.0", - "svelte-check": "^4.4.5", - "svelte-dnd-action": "0.9.69", - "svelte-intersection-observer": "^1.1.1", - "svelte-multiselect": "^11.6.4", - "svelte-preprocess": "^6.0.3", - "svelte-spa-router": "^5.0.0", + "svelte": "^5.57.1", + "svelte-check": "^4.7.6", + "svelte-dnd-action": "0.9.79", + "svelte-intersection-observer": "^2.2.0", + "svelte-multiselect": "^11.8.0", + "svelte-preprocess": "^6.0.5", + "svelte-spa-router": "^5.1.1", "tslib": "^2.8.1", "typescript": "^5.9.3", - "typescript-eslint": "^8.57.2", + "typescript-eslint": "^8.71.0", "unplugin-icons": "^22.2.0", "vite": "^8.0.3" } @@ -78,6 +78,30 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@cacheable/memory": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz", + "integrity": "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.5.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz", + "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, "node_modules/@cowasm/memfs": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/@cowasm/memfs/-/memfs-3.5.1.tgz", @@ -157,13 +181,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.23.3", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.3.tgz", - "integrity": "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==", + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^3.0.3", + "@eslint/object-schema": "^3.0.5", "debug": "^4.3.1", "minimatch": "^10.2.4" }, @@ -172,22 +196,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.3.tgz", - "integrity": "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz", + "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^1.1.1" + "@eslint/core": "^1.2.1" }, "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz", - "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -219,9 +243,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.3.tgz", - "integrity": "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -229,13 +253,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", - "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.3.tgz", + "integrity": "sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^1.1.1", + "@eslint/core": "^1.2.1", "levn": "^0.4.1" }, "engines": { @@ -309,9 +333,9 @@ } }, "node_modules/@iconify/json": { - "version": "2.2.456", - "resolved": "https://registry.npmjs.org/@iconify/json/-/json-2.2.456.tgz", - "integrity": "sha512-u2215knwHqSTgvRwkwziitJr5Js25KukLhW8C58fUGyNsD6P5EWoOb5nA0o8K8tzqUBi/622XTdf7wN2hmK+NA==", + "version": "2.2.537", + "resolved": "https://registry.npmjs.org/@iconify/json/-/json-2.2.537.tgz", + "integrity": "sha512-GjMung20j59gXKDekv9PHMNF38aGnFH/+RkLo0jpfmN70gfUykMepWF5b/9y2MpCYxDHviiYDBWQ0Yoa+a2W7A==", "dev": true, "license": "MIT", "dependencies": { @@ -320,9 +344,9 @@ } }, "node_modules/@iconify/svelte": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@iconify/svelte/-/svelte-5.2.1.tgz", - "integrity": "sha512-zHmsIPmnIhGd5gc95bNN5FL+GifwMZv7M2rlZEpa7IXYGFJm/XGHdWf6PWQa6OBoC+R69WyiPO9NAj5wjfjbow==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@iconify/svelte/-/svelte-5.2.2.tgz", + "integrity": "sha512-XMXxD3nzH7yB68C3K4sNwzrJ1TBscODR0ZqCeNf0KGuEMCTSuCo0jHNDZ0o0iRXTylO41NSz/DWam/4atLG1yw==", "dev": true, "license": "MIT", "dependencies": { @@ -419,9 +443,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", "dev": true, "license": "MIT" }, @@ -436,6 +460,30 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "dev": true, + "license": "MIT" + }, "node_modules/@kurkle/color": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", @@ -1067,24 +1115,34 @@ "license": "MIT" }, "node_modules/@sveltejs/acorn-typescript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", - "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.13.tgz", + "integrity": "sha512-wgKggnhZVL9Bfx1OaKKTrYY9BFRk6C8UAkQNUcIv1+llzYrIqy+RZm5HPKzn0NpEBvTVhTqB4kQyllZywsRBRQ==", "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^8.9.0" } }, + "node_modules/@sveltejs/load-config": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@sveltejs/load-config/-/load-config-0.2.3.tgz", + "integrity": "sha512-VT3qmUb8pRV2QrZjd8iAmtg8lf4W0TIjZbvXtz5MKei/q96teWZgGJyyidJzOjzZzvdq616eSRVeMYIQChUTAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + } + }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-7.0.0.tgz", - "integrity": "sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-7.3.1.tgz", + "integrity": "sha512-ZPsLN8B1e/En+Ak5s4V7srFDT532oS0qieLsQwu63NGKsS+iAjoO2Js1BochlHlglcU+Pt7WAO3C5Ee+4f6gVA==", "dev": true, "license": "MIT", "dependencies": { "deepmerge": "^4.3.1", - "magic-string": "^0.30.21", + "magic-string": "^1.0.0", "obug": "^2.1.0", "vitefu": "^1.1.2" }, @@ -1096,6 +1154,16 @@ "vite": "^8.0.0-beta.7 || ^8.0.0" } }, + "node_modules/@sveltejs/vite-plugin-svelte/node_modules/magic-string": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.2.tgz", + "integrity": "sha512-vG+rjFRj1PqdIBozIxAGMjPlOhaVe+GXpbttY/iSK7rGcJRMlwNJO7dcUwmUqkymsFLJiNGI06t4D7Fr7yRC9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.6.0" + } + }, "node_modules/@tsconfig/svelte": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.8.tgz", @@ -1122,9 +1190,9 @@ "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, @@ -1136,16 +1204,16 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.25.tgz", + "integrity": "sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==", "dev": true, "license": "MIT" }, "node_modules/@types/luxon": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", - "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.6.tgz", + "integrity": "sha512-6KSjliQAXK8ZLgFQO4B7iE4Rpf/B3rItzCFuXezBY/XIAGxOdLd7vRNK9/StRPwiS/yJsVbB7HKpW46B8tcEuQ==", "dev": true, "license": "MIT" }, @@ -1159,28 +1227,21 @@ "undici-types": "~6.21.0" } }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "dev": true, - "license": "MIT" - }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", - "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.0.tgz", + "integrity": "sha512-pqcS9c1HxZTHt7End4nXqd0s5lJrrFzrgCkKFJrsbUnaL6M3+6oBFZaslg6Gjsl3argl2DDRFROnXARaZ2e4Nw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/type-utils": "8.57.2", - "@typescript-eslint/utils": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", + "@typescript-eslint/scope-manager": "8.71.0", + "@typescript-eslint/type-utils": "8.71.0", + "@typescript-eslint/utils": "8.71.0", + "@typescript-eslint/visitor-keys": "8.71.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1190,22 +1251,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.57.2", + "@typescript-eslint/parser": "^8.71.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", - "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.0.tgz", + "integrity": "sha512-CG4nPk1f2zc8yw4pALqHsFYH2hdo+h1T9daSp21+Hnxi9LOE3GT9hAfTKJCBXVNM2GmYs1eMEP615wPoeOgk3A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", + "@typescript-eslint/scope-manager": "8.71.0", + "@typescript-eslint/types": "8.71.0", + "@typescript-eslint/typescript-estree": "8.71.0", + "@typescript-eslint/visitor-keys": "8.71.0", "debug": "^4.4.3" }, "engines": { @@ -1217,18 +1278,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", - "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.71.0.tgz", + "integrity": "sha512-aABjw5rjBacYONVPaPiWOCjJu0vEF4a25iQuodlmQYL1trtLZ0X/y+2Vzl3BKI1odM4LnwLE1oUDXYp1wzx1TQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.57.2", - "@typescript-eslint/types": "^8.57.2", + "@typescript-eslint/tsconfig-utils": "^8.71.0", + "@typescript-eslint/types": "^8.71.0", "debug": "^4.4.3" }, "engines": { @@ -1239,18 +1300,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", - "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.71.0.tgz", + "integrity": "sha512-gWF0BhUcnjZxSpLE8ngS/59n2SB0J3YqRxvX1+2aoRJk9hNtHSLOV+TcarFiOr5ipXm3yc1QrI4c9YZc8zyCxw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2" + "@typescript-eslint/types": "8.71.0", + "@typescript-eslint/visitor-keys": "8.71.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1261,9 +1322,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", - "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.0.tgz", + "integrity": "sha512-Z1UlWHADEK2Mlb9NpWfDeSjqoZ5EyrOv4R3eQpbkzqn/EwaIdOpXXupEA1+0ZIOSJSZZDBHG0BrQyN8zUG6Pwg==", "dev": true, "license": "MIT", "engines": { @@ -1274,21 +1335,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", - "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.71.0.tgz", + "integrity": "sha512-i8uO1qbdxeKgRnS5sCRt6On3/nfo2d2DwQe3Yvjx543zLy7r8ySqRuPPiIIXAhS03U0v5NfAFx+rUgxFzKKwNw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/utils": "8.57.2", + "@typescript-eslint/types": "8.71.0", + "@typescript-eslint/typescript-estree": "8.71.0", + "@typescript-eslint/utils": "8.71.0", "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1299,13 +1360,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", - "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.71.0.tgz", + "integrity": "sha512-cJ4OoxPGWvFnBTnSZyaU+qJzGTqPTGJY+gDchj6cRyLRdmIdt4rcsE4twj+zPfrNiWuVi38wijHzShL++Z9atQ==", "dev": true, "license": "MIT", "engines": { @@ -1317,21 +1378,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", - "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.0.tgz", + "integrity": "sha512-PEEF4G5sLLWAS5BpPrUvms4ySZkiBQQZM4z+3ReI46axK5Vqr/vXBQatJQIZZOYdGyPUAKTtsrWzpqKuU+3DEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.57.2", - "@typescript-eslint/tsconfig-utils": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", + "@typescript-eslint/project-service": "8.71.0", + "@typescript-eslint/tsconfig-utils": "8.71.0", + "@typescript-eslint/types": "8.71.0", + "@typescript-eslint/visitor-keys": "8.71.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1341,20 +1402,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", - "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.71.0.tgz", + "integrity": "sha512-pKR/tEMVrXZG23UFKUn5BQf3zfmfk7KQceI2cGzywZ5nxM5Eu3hEJU1utjWzydtzBbcJAQhHN8iPCxobHpPcZQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2" + "@typescript-eslint/scope-manager": "8.71.0", + "@typescript-eslint/types": "8.71.0", + "@typescript-eslint/typescript-estree": "8.71.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1365,17 +1426,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz", - "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.0.tgz", + "integrity": "sha512-8eQ9R218XORK+KLosnf4bu/QsUXvUyVwTbArg7/0NMB1Pu87OJKvj4nhFblkYE8gQV73mW1dx1ptlPCkwRGa7A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/types": "8.71.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -1421,9 +1482,9 @@ } }, "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "dev": true, "license": "MIT", "bin": { @@ -1471,9 +1532,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.27", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", - "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.6.1.tgz", + "integrity": "sha512-cL1Qz6ADZhcEbny/8HPfe99J6HhNoYtpX2LFLIbhgGE7Q1hlQVkYFdetDN7Id3KiQxhDrHwzlHr/YQCnZ8+xSA==", "dev": true, "funding": [ { @@ -1491,8 +1552,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001774", + "browserslist": "^4.28.9", + "caniuse-lite": "^1.0.30001810", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -1537,9 +1598,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.10", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz", - "integrity": "sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==", + "version": "2.11.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.27.tgz", + "integrity": "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -1568,16 +1629,16 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/braces": { @@ -1595,9 +1656,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz", + "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==", "dev": true, "funding": [ { @@ -1615,11 +1676,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "baseline-browser-mapping": "^2.11.26", + "caniuse-lite": "^1.0.30001813", + "electron-to-chromium": "^1.5.439", + "node-releases": "^2.0.57", + "update-browserslist-db": "^1.3.3" }, "bin": { "browserslist": "cli.js" @@ -1628,10 +1689,24 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/cacheable": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz", + "integrity": "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.2.0", + "@cacheable/utils": "^2.5.0", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.10.1" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001780", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001780.tgz", - "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==", + "version": "1.0.30001814", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001814.tgz", + "integrity": "sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==", "dev": true, "funding": [ { @@ -1782,16 +1857,16 @@ } }, "node_modules/devalue": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", - "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.9.4.tgz", + "integrity": "sha512-sPAT4pztbu6586/hrhOnMKS17IJrvg12mXiSPSS3W5qDeN2RGgvZ0diZCm31dBbnevfVmujNO3IM2wrS4Y2Rhg==", "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.321", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.321.tgz", - "integrity": "sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==", + "version": "1.5.444", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.444.tgz", + "integrity": "sha512-5ss/uJfoDYDHT0lfJzT6FbcskIzROIOPf0BbbFkGcvDzoJU7i//9GDrwwIHQVmIsrAGiF3ihpADBRIsrEFt1rQ==", "dev": true, "license": "ISC" }, @@ -1819,18 +1894,21 @@ } }, "node_modules/eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz", - "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==", + "version": "10.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.12.0.tgz", + "integrity": "sha512-npHjrHb2o4ehH3mE+YuxABR+0gyb0aVWCIolgJDArwCiHEIsonBm3ZKjel5b0U5+a+MbEvIyRCGCzD3eKKK2NA==", "dev": true, "license": "MIT", + "workspaces": [ + "packages/*" + ], "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.3", - "@eslint/config-helpers": "^0.5.3", - "@eslint/core": "^1.1.1", - "@eslint/plugin-kit": "^0.6.1", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.7.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -1845,14 +1923,14 @@ "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", + "file-entry-cache": "11.1.5 || >11.1.6 <12", "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", - "minimatch": "^10.2.4", + "minimatch": "^10.2.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -1891,9 +1969,9 @@ } }, "node_modules/eslint-plugin-svelte": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.16.0.tgz", - "integrity": "sha512-DJXxqpYZUxcE0SfYo8EJzV2ZC+zAD7fJp1n1HwcEMRR1cOEUYvjT9GuzJeNghMjgb7uxuK3IJAzI+x6zzUxO5A==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.23.0.tgz", + "integrity": "sha512-n9jRklDqy0+W834568a4ZIZTK7DHXxvvHHxxGP8nNq7N//pOZMubttskHOquyGgfTR4Z05q2NdGNlsTpIEA48w==", "dev": true, "license": "MIT", "dependencies": { @@ -1906,7 +1984,7 @@ "postcss-load-config": "^3.1.4", "postcss-safe-parser": "^7.0.0", "semver": "^7.6.3", - "svelte-eslint-parser": "^1.4.0" + "svelte-eslint-parser": "^1.7.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2079,14 +2157,21 @@ } }, "node_modules/esrap": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.4.tgz", - "integrity": "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.4.0.tgz", + "integrity": "sha512-CQPcneEHw/czj32uwQC52nYnax8H4SXt25FCM+LIwGZ49cMIxpOj3bP8wmzcI+Z0HIy5KkClaPhRLfCySzwHPA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "peerDependencies": { "@typescript-eslint/types": "^8.2.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/types": { + "optional": true + } } }, "node_modules/esrecurse": { @@ -2185,16 +2270,13 @@ "dev": true }, "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==", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz", + "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" + "flat-cache": "^6.1.23" } }, "node_modules/fill-range": { @@ -2229,23 +2311,21 @@ } }, "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==", + "version": "6.1.23", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz", + "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" + "cacheable": "^2.5.0", + "flatted": "^3.4.2", + "hookified": "^1.15.0" } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", "dev": true, "license": "ISC" }, @@ -2298,9 +2378,9 @@ } }, "node_modules/globals": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", - "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.13.0.tgz", + "integrity": "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==", "dev": true, "license": "MIT", "engines": { @@ -2310,6 +2390,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "dev": true, + "license": "MIT" + }, "node_modules/idb": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.3.tgz", @@ -2395,13 +2495,6 @@ "dev": true, "license": "ISC" }, - "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", @@ -2417,13 +2510,13 @@ "license": "MIT" }, "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==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", "dev": true, "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "@keyv/serialize": "^1.1.1" } }, "node_modules/known-css-properties": { @@ -2777,9 +2870,9 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, @@ -2818,13 +2911,13 @@ } }, "node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^5.0.8" }, "engines": { "node": "18 || 20 || >=22" @@ -2937,11 +3030,14 @@ } }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "version": "2.0.57", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", + "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/obug": { "version": "2.1.1", @@ -3201,9 +3297,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz", + "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==", "dev": true, "license": "MIT", "dependencies": { @@ -3232,9 +3328,9 @@ } }, "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.9.tgz", + "integrity": "sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==", "dev": true, "license": "MIT", "bin": { @@ -3279,6 +3375,26 @@ "node": ">=6" } }, + "node_modules/qified": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", + "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qified/node_modules/hookified": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", + "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", + "dev": true, + "license": "MIT" + }, "node_modules/quansync": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", @@ -3492,24 +3608,23 @@ } }, "node_modules/svelte": { - "version": "5.55.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.55.0.tgz", - "integrity": "sha512-SThllKq6TRMBwPtat7ASnm/9CDXnIhBR0NPGw0ujn2DVYx9rVwsPZxDaDQcYGdUz/3BYVsCzdq7pZarRQoGvtw==", + "version": "5.57.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.57.1.tgz", + "integrity": "sha512-Uqj49lWKB+iSSnneuwiYYJ7MZgkB+eXr0LXBhv4uDuAkXqnWmq65Sxflfvp0Lc6MdKjMUxGaeOKWJqz5SNiVIA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/remapping": "^2.3.4", - "@jridgewell/sourcemap-codec": "^1.5.0", - "@sveltejs/acorn-typescript": "^1.0.5", - "@types/estree": "^1.0.5", - "@types/trusted-types": "^2.0.7", - "acorn": "^8.12.1", + "@jridgewell/remapping": "^2.3.5", + "@jridgewell/sourcemap-codec": "^1.6.0", + "@sveltejs/acorn-typescript": "^1.0.13", + "@types/estree": "^1.0.9", + "acorn": "^8.18.0", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", - "devalue": "^5.6.4", + "devalue": "^5.9.2", "esm-env": "^1.2.1", - "esrap": "^2.2.2", + "esrap": "^2.3.6", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", @@ -3520,13 +3635,14 @@ } }, "node_modules/svelte-check": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.4.5.tgz", - "integrity": "sha512-1bSwIRCvvmSHrlK52fOlZmVtUZgil43jNL/2H18pRpa+eQjzGt6e3zayxhp1S7GajPFKNM/2PMCG+DZFHlG9fw==", + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.7.6.tgz", + "integrity": "sha512-t2scM//ZuVbSY/T2w6FSBw1v9s2NEmh/g+sy1lqtosW5ylBV5AF4wFb1Ts9Kf3MbfPDUDJDZ9L436YT0SPTdvw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", + "@sveltejs/load-config": "^0.2.3", "chokidar": "^4.0.1", "fdir": "^6.2.0", "picocolors": "^1.0.0", @@ -3540,7 +3656,7 @@ }, "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.0", - "typescript": ">=5.0.0" + "typescript": "^5.0.0 || ^6.0.0" } }, "node_modules/svelte-check/node_modules/fdir": { @@ -3574,9 +3690,9 @@ } }, "node_modules/svelte-dnd-action": { - "version": "0.9.69", - "resolved": "https://registry.npmjs.org/svelte-dnd-action/-/svelte-dnd-action-0.9.69.tgz", - "integrity": "sha512-NAmSOH7htJoYraTQvr+q5whlIuVoq88vEuHr4NcFgscDRUxfWPPxgie2OoxepBCQCikrXZV4pqV86aun60wVyw==", + "version": "0.9.79", + "resolved": "https://registry.npmjs.org/svelte-dnd-action/-/svelte-dnd-action-0.9.79.tgz", + "integrity": "sha512-zCKaG1Q9hVgfJFyZXhY+uIpo9+cjsG03CqwNz8yBlWCRBphC8U2zli9FzIcrL4rhXEs8yV+asS4rV0RHDuQqQQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3584,9 +3700,9 @@ } }, "node_modules/svelte-eslint-parser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.6.0.tgz", - "integrity": "sha512-qoB1ehychT6OxEtQAqc/guSqLS20SlA53Uijl7x375s8nlUT0lb9ol/gzraEEatQwsyPTJo87s2CmKL9Xab+Uw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.8.1.tgz", + "integrity": "sha512-5zgKBqAf6V8Jyrmr1jViksyG4NKT8NheYwkdxRaMRDAqpGWi9wR8ktcGrAZbfMn/PHUp1BWzAp0cYQECkWuAMA==", "dev": true, "license": "MIT", "dependencies": { @@ -3600,7 +3716,7 @@ }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0", - "pnpm": "10.30.3" + "pnpm": "10.34.5" }, "funding": { "url": "https://github.com/sponsors/ota-meshi" @@ -3628,36 +3744,36 @@ } }, "node_modules/svelte-intersection-observer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/svelte-intersection-observer/-/svelte-intersection-observer-1.1.1.tgz", - "integrity": "sha512-T5Jkj5pkwhZcDIOQZh0tayAOnzJWRsE8Op667kAHlxLXV7TTsqLfkx1mkLLtPGMckpXQLLsrChHHnIb9HqvNzQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/svelte-intersection-observer/-/svelte-intersection-observer-2.2.0.tgz", + "integrity": "sha512-CBu9oEzRt/dbxZeZtTlCb8N6e7Eiet6GOsupS2jNNKuekJ1VLbj1H5Eozs9riHrKNvSYu8fIUpPTWk+6S3x48g==", "dev": true, "license": "MIT" }, "node_modules/svelte-multiselect": { - "version": "11.6.4", - "resolved": "https://registry.npmjs.org/svelte-multiselect/-/svelte-multiselect-11.6.4.tgz", - "integrity": "sha512-AEV4xvUa7IlIvJGnjZpcahroyfCW6td4GpvIPRWan6P9xrTJnpjbVGlemUCrMchViPUPDsckCHA9iuoV4oJfCQ==", + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/svelte-multiselect/-/svelte-multiselect-11.8.0.tgz", + "integrity": "sha512-B+y6UPZCB9/EWk9a0kxBkN4Z05bMj8g10N2RK6CNLrkRDD2iS1hLs1jJTWuQUDSbUofNChLk6kqx9nSrs8xzwQ==", "dev": true, "license": "MIT", "peerDependencies": { "@wooorm/starry-night": "^3.0.0", - "acorn": "^8.0.0", - "svelte": "^5.48.0" + "svelte": "^5.48.0", + "vite": "^8.0.0" }, "peerDependenciesMeta": { "@wooorm/starry-night": { "optional": true }, - "acorn": { + "vite": { "optional": true } } }, "node_modules/svelte-preprocess": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz", - "integrity": "sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.5.tgz", + "integrity": "sha512-sgwew5yV/2eMeQobIWgAxCNarKwiTUDIc3siAUbq3sp0G6ONtzk0W+wJihMdqjbYb3iGU3ubpGv0usnnuXT3qg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3675,7 +3791,7 @@ "stylus": ">=0.55", "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", "svelte": "^4.0.0 || ^5.0.0-next.100 || ^5.0.0", - "typescript": "^5.0.0" + "typescript": "^5.0.0 || ^6.0.0" }, "peerDependenciesMeta": { "@babel/core": { @@ -3711,9 +3827,9 @@ } }, "node_modules/svelte-spa-router": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/svelte-spa-router/-/svelte-spa-router-5.0.0.tgz", - "integrity": "sha512-4F2irDGf2CkPxAz/tr/GwnAErZuG9l8J3ClHo2QfKPh0Ul4j9K9R3q91RaoekXZzJW90NHMY+dKLM9eF6vdcyA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/svelte-spa-router/-/svelte-spa-router-5.1.1.tgz", + "integrity": "sha512-/9PiiyS2jQIXlP+NlKRcPl/Bgwm6WTCTmJq8TZw5IShEbozwcfpX2V3YEL4lAVgJJ2Ni+ipAH7aYVEupeNwtHA==", "dev": true, "license": "MIT", "dependencies": { @@ -3721,6 +3837,9 @@ }, "funding": { "url": "https://github.com/sponsors/ItalyPaleAle" + }, + "peerDependencies": { + "svelte": "^5.0.0" } }, "node_modules/tinyexec": { @@ -3890,16 +4009,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.2.tgz", - "integrity": "sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==", + "version": "8.71.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.71.0.tgz", + "integrity": "sha512-fBdHYiqQ14RW6mOMXD14Svn82ZsCYAoQSzGRzyEjR59S5A2Krh/l7fGTOQ7iCr8gGy/mHVXtEF7s5fgjEdV0Pw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.57.2", - "@typescript-eslint/parser": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/utils": "8.57.2" + "@typescript-eslint/eslint-plugin": "8.71.0", + "@typescript-eslint/parser": "8.71.0", + "@typescript-eslint/typescript-estree": "8.71.0", + "@typescript-eslint/utils": "8.71.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3910,7 +4029,7 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/ufo": { @@ -4011,9 +4130,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", "dev": true, "funding": [ { diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 78299cebc..35e4c3e1e 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -24,37 +24,37 @@ }, "devDependencies": { "@eslint/js": "^10.0.1", - "@iconify/json": "^2.2.456", - "@iconify/svelte": "^5.2.1", + "@iconify/json": "^2.2.537", + "@iconify/svelte": "^5.2.2", "@iconify/types": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@sveltejs/vite-plugin-svelte": "^7.3.1", "@tsconfig/svelte": "^5.0.8", - "@types/lodash": "^4.17.24", - "@types/luxon": "^3.7.1", + "@types/lodash": "^4.17.25", + "@types/luxon": "^3.7.6", "@types/node": "22.15.30", - "@typescript-eslint/eslint-plugin": "^8.57.2", - "@typescript-eslint/parser": "^8.57.2", - "autoprefixer": "^10.4.27", + "@typescript-eslint/eslint-plugin": "^8.71.0", + "@typescript-eslint/parser": "^8.71.0", + "autoprefixer": "^10.6.1", "bebop-tools": "^3.2.3", - "eslint": "^10.1.0", + "eslint": "^10.12.0", "eslint-config-prettier": "10.1.8", - "eslint-plugin-svelte": "^3.16.0", - "globals": "^17.4.0", + "eslint-plugin-svelte": "^3.23.0", + "globals": "^17.13.0", "idb": "^8.0.3", - "lodash": "^4.17.23", - "prettier": "^3.8.1", + "lodash": "^4.18.1", + "prettier": "^3.9.9", "prettier-plugin-svelte": "^3.5.1", "sass": "1.92.1", - "svelte": "^5.55.0", - "svelte-check": "^4.4.5", - "svelte-dnd-action": "0.9.69", - "svelte-intersection-observer": "^1.1.1", - "svelte-multiselect": "^11.6.4", - "svelte-preprocess": "^6.0.3", - "svelte-spa-router": "^5.0.0", + "svelte": "^5.57.1", + "svelte-check": "^4.7.6", + "svelte-dnd-action": "0.9.79", + "svelte-intersection-observer": "^2.2.0", + "svelte-multiselect": "^11.8.0", + "svelte-preprocess": "^6.0.5", + "svelte-spa-router": "^5.1.1", "tslib": "^2.8.1", "typescript": "^5.9.3", - "typescript-eslint": "^8.57.2", + "typescript-eslint": "^8.71.0", "unplugin-icons": "^22.2.0", "vite": "^8.0.3" } From 42f7e92d384bc2a199d8dac06f986592db2d1048 Mon Sep 17 00:00:00 2001 From: Freddie Date: Sat, 3 Oct 2026 18:10:58 -0700 Subject: [PATCH 9/9] Move ignored skill line abilities to manual data --- .../character-table/row/RaiderIo.svelte | 2 +- .../shared/stores/data/manual/process.ts | 2 + .../shared/stores/data/manual/types.ts | 3 + .../collections/recipes/Ability.svelte | 4 +- .../collections/recipes/View.svelte | 7 +- .../user-home/state/user/derived.svelte.ts | 8 + apps/tool/Data/IgnoredSkillLineAbilities.cs | 289 ------------------ apps/tool/Models/Manual/RedisManualData.cs | 9 +- apps/tool/Tools/DumpsTool.cs | 8 +- apps/tool/Tools/ManualTool.cs | 21 ++ apps/tool/Tools/StaticTool.cs | 8 +- 11 files changed, 56 insertions(+), 305 deletions(-) diff --git a/apps/frontend/components/character-table/row/RaiderIo.svelte b/apps/frontend/components/character-table/row/RaiderIo.svelte index 531b0578d..99c2c9d76 100644 --- a/apps/frontend/components/character-table/row/RaiderIo.svelte +++ b/apps/frontend/components/character-table/row/RaiderIo.svelte @@ -1,9 +1,9 @@ @@ -66,7 +68,7 @@ } -{#if (userHas && $recipesState.showCollected) || (!userHas && $recipesState.showUncollected)} +{#if (userHas && $recipesState.showCollected) || (!userHas && $recipesState.showUncollected && !isIgnored)} abilityId), ]; const abilityUserHas = userState.recipes.hasAbility[ability.id]; + abilityIds.forEach((_abilityId, index) => { const userHas = abilityUserHas[index]; if ( (userHas && $recipesState.showCollected) || - (!userHas && $recipesState.showUncollected) + (!userHas && $recipesState.showUncollected && !isIgnored) ) { anyShown = true; return; diff --git a/apps/frontend/user-home/state/user/derived.svelte.ts b/apps/frontend/user-home/state/user/derived.svelte.ts index f71704574..f74de484e 100644 --- a/apps/frontend/user-home/state/user/derived.svelte.ts +++ b/apps/frontend/user-home/state/user/derived.svelte.ts @@ -265,6 +265,14 @@ export class DataUserDerived { (have) => have ).length; + // don't add stats for ignored spells that the user doesn't know + if ( + abilityHave === 0 && + wowthingData.manual.ignoredSkillLineAbilitySpellIds.has(ability.spellId) + ) { + continue; + } + if ( !settingsState.value.collections.hideFuture || categoryIndex <= Constants.expansion diff --git a/apps/tool/Data/IgnoredSkillLineAbilities.cs b/apps/tool/Data/IgnoredSkillLineAbilities.cs index 2c1f38d9a..d5b7f26f9 100644 --- a/apps/tool/Data/IgnoredSkillLineAbilities.cs +++ b/apps/tool/Data/IgnoredSkillLineAbilities.cs @@ -17,293 +17,4 @@ public static partial class Hardcoded 50551, // Rockslide Shake that doesn't exist ]; - - public static readonly HashSet IgnoredSkillLineAbilitySpells = - [ - // Alchemy - 17579, // Greater Holy Protection Potion - 28577, // Major Holy Protection Potion - 54020, // Transmute: Eternal Might - 156567, // WoD Draenor Armor Flask (never implemented) - 156588, // WoD Alchemical Catalyst - Fireweed - 156589, // WoD Alchemical Catalyst - Flytrap - 156590, // WoD Alchemical Catalyst - Starflower - 156591, // WoD Primal Alchemy (never implemented) - 156592, // WoD Alchemical Catalyst - Orchid - 156593, // WoD Alchemical Catalyst - Lotus - 168042, // WoD Alchemical Catalyst (dupe for max results?) - 370771, // Dragon Isles Alchemy Troubleshooting Test Recipe (DNT) - 371635, // Demonstration Item Recipe - 430606, // TWW ?? - 433271, // TWW ?? - 433604, // TWW ?? - 433605, // TWW ?? - 433606, // TWW ?? - 433607, // TWW ?? - 433608, // TWW ?? - 430610, // TWW ?? - 1230772, // Mid ?? - 1230871, // Mid ?? - 1230879, // Mid ?? - 1230880, // Mid ?? - 1230881, // Mid ?? - 1230882, // Mid ?? - 1230884, // Mid ?? - 1233131, // Mid ?? - 1233139, // Mid ?? - - // Blacksmithing - 2671, // Rough Bronze Bracers - 8366, // Ironforge Chain - 8368, // Ironforge Gauntlets - 9942, // Mithril Scale Gloves - 9957, // Orcish War Leggings - // 9972, // Ornate Mithril Breastplate - // 9979, // Ornate Mithril Boots - // 9980, // Ornate Mithril Helm - 16960, // Thorium Greatsword - 16965, // Bleakwood Hew - 16967, // Inlaid Thorium Hammer - 16980, // Rune Edge - 16986, // Blood Talon - 34529, // Nether Chain Shirt - 34530, // TBC Twisting Nether Chain Shirt - 55183, // WotLK Corroded Saronite Edge - 55184, // WotLK Corroded Saronite Woundbringer - 55186, // WotLK Chestplate of Conquest - 55187, // WotLK Legplates of Conquest - 409224, // Reclaimed Gauntlet Chassis (temporary legendary craft) - - // Blacksmithing - MoP Spiritguard - 122568, // Helm - 122569, // Shoulders - 122570, // Breastplate - 122571, // Gauntlets - 122572, // Legplates - 122573, // Bracers - 122574, // Boots - 122575, // Belt - - // Blacksmithing - MoP Lightsteel - 122584, // Helm - 122585, // Shoulders - 122586, // Breastplate - 122587, // Gauntlets - 122588, // Legplates - 122589, // Bracers - 122590, // Boots - 122591, // Belt - - // Blacksmithing - MoP Masterwork Lightsteel - 122608, // Helm - 122609, // Shoulders - 122610, // Breastplate - 122611, // Gauntlets - 122612, // Legplates - 122613, // Bracers - 122614, // Boots - 122615, // Belt - - // Blacksmithing - MoP ?? - 122600, - 122601, - 122602, - 122603, - 122604, - 122605, - 122606, - 122607, - - // Blacksmithing - Draenic Steel - 153605, - 153606, - 153607, - 153608, - 153609, - 153610, - 153611, - 153612, - 153627, - 153628, - 153629, - 153630, - 153631, - 153643, - 153644, - 153645, - 153646, - 153647, - 153648, - 153649, - 153650, - 153651, - 153652, - 153653, - 153654, - 153655, - 153656, - 153657, - 153658, - 153659, - 153660, - 153661, - 153663, - 153664, - 153665, - 153666, - 153667, - 153668, - - // Cooking - 145167, // Grand Noodle Cart Kit - 145170, // Grand Deluxe Noodle Cart Kit - 145197, // Grand Pandaren Treasure Noodle Cart Kit - 169693, // Whole Pot-Roasted Elekk - 169696, // Marinated Elekk Steak - 169699, // Seasoned Elekk Ribeye - - // Enchanting - 28021, // Arcane Dust - 44612, // WotLK Greater Blasting - 62257, // WotLK Titanguard - 343681, // Shadowlands ?? - 422338, // Shalasar's Sophic Vellum (temporary legendary craft) - - // Enchanting - WoD mess - 173716, - 173717, - 173718, - 174979, - 173720, - 175076, - 173721, - 173722, - 173723, - 175072, - 175071, - 173719, - 173724, - 181870, - 175070, - 173725, - 173726, - 175085, - 173727, - 173728, - 173729, - 175086, - 175078, - 173730, - 173731, - 173732, - 175074, - 177355, - 178241, // Other Temporal Crystal? - - // Engineering - 12900, // Mobile Alarm - 30342, // TBC Red Smoke Flare - 30343, // TBC Blue Smoke Flare - 162208, // Ultimate Gnomish Army Knife (dupe for BoE?) - 178242, // Gearspring Parts (dupe for max results?) - 407170, // Inspired Order Recalibrator (temporary legendary craft) - 473408, // Housing Crafting Test Recipe - 1229918, // Mid ?? - 1229925, // Mid ?? - 1229929, // Mid ?? - 1261938, // Mid ?? - - // Fishing - 1231090, // Mid Rootland Crab Lure - - // Inscription - 127475, // MoP Incarnadine Ink - 130407, // MoP Mystery of the Mists - 176513, // WoD Draenor Merchant Order - 178240, // WoD War Paints - 178550, // WoD Borrow Draenic Mortar - 343687, // Shadowlands ?? - 422337, // Lydaria's Binding Rune (temporary legendary craft) - 1230063, // Mid ?? - - // Jewelcrafting - 25614, // TBC Silver Rose Pendant - 26918, // TBC Arcanite Sword Pendant - 26920, // TBC Blood Crown - 32810, // TBC Primal Stone Statue - 73233, // Cata Mystic Alicite - 73259, // Cata Resolute Hessonite - 407161, // Immaculate Coalescing Dracothyst (temporary legendary craft) - - // Leatherworking - 10550, // Nightscape Cloak - 10619, // Classic Dragonscale Gauntlets - 10621, // Classic Wolfshead Helm - 19106, // Onyxia Scale Breastplate - 35575, // TBC Ebon Netherscale Breastplate - 35576, // TBC Ebon Netherscale Belt - 35577, // TBC Ebon Netherscale Bracers - 35580, // TBC Netherstrike Breastplate - 35582, // TBC Netherstrike Belt - 35584, // TBC Netherstrike Bracers - 35585, // TBC Windhawk Hauberk - 35587, // TBC Windhawk Belt - 35588, // TBC Windhawk Bracers - 35589, // TBC Primalstrike Vest - 35590, // TBC Primalstrike Belt - 35591, // TBC Primalstrike Bracers - 44359, // TBC Quiver of a Thousand Feathers - 102366, // Mist-Touched Leather (combining 5 pieces?) - 171713, // Burnished Leather (dupe for max results?) - 173416, // Small Football (never implemented?) - 293135, // Legion Drum of Primal Night (quest?) - 422330, // Erden's Glowspore Grip (temporary legendary craft) - - // Mining - // 389465, // Severite Seam - // 389458, // Draconium Seam - 423882, // Overload Test Deposit - - // Tailoring - 7636, // Green Woolen Robe - 8778, // Boots of Darkness - 12062, // Stormcloth Pants - 12063, // Stormcloth Gloves - 12068, // Stormcloth Vest - 12083, // Stormcloth Headband - 12087, // Stormcloth Shoulders - 12090, // Stormcloth Boots - 36665, // Pattern: Netherflame Robe - 36667, // Pattern: Netherflame Belt - 36668, // Pattern: Netherflame Boots - 36669, // Pattern: Lifeblood Leggings - 36670, // Pattern: Lifeblood Belt - 36672, // Pattern: Lifeblood Bracers - - 104115, // MoP Release Fire Spirit - 168851, // Miniature Flying Carpet (never implemented) - 169669, // Hexweave Cloth (dupe for max results?) - 173415, // WoD ?? - 176313, // [A] Inspiring Battle Standard (garrison building craft) - 176314, // [A] Fearsome Battle Standard (garrison building craft) - 176315, // [H] Inspiring Battle Standard (garrison building craft) - 176316, // [H] Fearsome Battle Standard (garrison building craft) - 1228435, // Mid ?? - 1228998, // Mid ?? - 1228999, // Mid ?? - 1230770, // Mid ?? - 1279126, // Mid ?? - - // Tailoring ranks? - 3908, - 3909, - 3910, - 12180, - 26790, - 51309, - 75156, - 110426, - 158758, - 195126 - ]; } diff --git a/apps/tool/Models/Manual/RedisManualData.cs b/apps/tool/Models/Manual/RedisManualData.cs index 0469a306d..916d566ff 100644 --- a/apps/tool/Models/Manual/RedisManualData.cs +++ b/apps/tool/Models/Manual/RedisManualData.cs @@ -13,16 +13,15 @@ namespace Wowthing.Tool.Models.Manual; public class ManualCache { - public List?> RawCustomizationCategories { get; set; } public List Dragonriding { get; set; } + public List IgnoredSkillLineAbilitySpells { get; set; } + public List> ProgressSets { get; set; } + + public List?> RawCustomizationCategories { get; set; } public DataHeirloomGroup[] RawHeirloomGroups { get; set; } public DataIllusionGroup[] RawIllusionGroups { get; set; } public List> RawMountSets { get; set; } public List> RawPetSets { get; set; } - - //[JsonProperty("rawProgressSets")] - public List> ProgressSets { get; set; } - public List RawReputationSets { get; set; } public List> RawToySets { get; set; } public List> RawTransmogSets { get; set; } diff --git a/apps/tool/Tools/DumpsTool.cs b/apps/tool/Tools/DumpsTool.cs index 5c4a5e658..763109170 100644 --- a/apps/tool/Tools/DumpsTool.cs +++ b/apps/tool/Tools/DumpsTool.cs @@ -1692,7 +1692,7 @@ private async Task ImportRecipeItems(WowDbContext context) foreach (var skillLineAbility in skillLineAbilities) { if (skillLineAbility.Spell == 0 || - Hardcoded.IgnoredSkillLineAbilities.Contains(skillLineAbility.ID) || + // Hardcoded.IgnoredSkillLineAbilities.Contains(skillLineAbility.ID) || !_teachSpellBySpellId.TryGetValue(skillLineAbility.Spell, out var recipeItemIds)) { continue; @@ -1717,9 +1717,9 @@ private async Task ImportRecipeItems(WowDbContext context) } } - await context.WowProfessionRecipeItem - .Where(item => Hardcoded.IgnoredSkillLineAbilities.Contains(item.SkillLineAbilityId)) - .ExecuteDeleteAsync(); + // await context.WowProfessionRecipeItem + // .Where(item => Hardcoded.IgnoredSkillLineAbilities.Contains(item.SkillLineAbilityId)) + // .ExecuteDeleteAsync(); _timer.AddPoint("RecipeItems"); } diff --git a/apps/tool/Tools/ManualTool.cs b/apps/tool/Tools/ManualTool.cs index 440ab58c8..216d3e407 100644 --- a/apps/tool/Tools/ManualTool.cs +++ b/apps/tool/Tools/ManualTool.cs @@ -212,6 +212,9 @@ private async Task CacheData(WowDbContext context) cacheData.RawHeirloomGroups = LoadHeirlooms(); _timer.AddPoint("Heirlooms"); + cacheData.IgnoredSkillLineAbilitySpells = LoadIgnoredSkillLineAbilitySpells(); + _timer.AddPoint("IgnoredSkillLineAbilitySpells"); + cacheData.RawIllusionGroups = LoadIllusions(); _timer.AddPoint("Illusions"); @@ -686,6 +689,24 @@ private DataHeirloomGroup[] LoadHeirlooms() ); } + private List LoadIgnoredSkillLineAbilitySpells() + { + var di = new DirectoryInfo(Path.Join(DataUtilities.DataPath, "professions", "ignored-spells")); + var files = di.GetFiles("*.yml", SearchOption.AllDirectories) + .OrderBy(file => file.FullName) + .ToArray(); + + var ret = new HashSet(); + + foreach (var file in files) + { + int[] spellIds = DataUtilities.YamlDeserializer.Deserialize(File.OpenText(file.FullName)); + ret.UnionWith(spellIds); + } + + return ret.Order().ToList(); + } + private DataIllusionGroup[] LoadIllusions() { return DataUtilities.YamlDeserializer diff --git a/apps/tool/Tools/StaticTool.cs b/apps/tool/Tools/StaticTool.cs index 0b2f91513..1a3a93da7 100644 --- a/apps/tool/Tools/StaticTool.cs +++ b/apps/tool/Tools/StaticTool.cs @@ -762,8 +762,8 @@ private async Task>> LoadProfessions( var skillLineAbilities = await DataUtilities.LoadDumpCsvAsync( "skilllineability", - Language.enUS, - ability => !Hardcoded.IgnoredSkillLineAbilities.Contains(ability.ID) + Language.enUS + // ability => !Hardcoded.IgnoredSkillLineAbilities.Contains(ability.ID) ); var professions = skillLines @@ -909,8 +909,8 @@ private async Task>> LoadProfessions( var abilities = categoryAbilities .GetValueOrDefault(category.ID, []) - .Where(ability => ability.SupercedesSpell == 0 && - !Hardcoded.IgnoredSkillLineAbilitySpells.Contains(ability.Spell)) + .Where(ability => ability.SupercedesSpell == 0)// && + // !Hardcoded.IgnoredSkillLineAbilitySpells.Contains(ability.Spell)) .OrderByDescending(ability => ability.MinSkillLineRank) //.ThenByDescending(ability => ability.TrivialSkillLineRankLow) .ThenByDescending(ability => ability.TrivialSkillLineRankHigh)