diff --git a/admin/src/auth/AuthProvider.tsx b/admin/src/auth/AuthProvider.tsx
index cdfacc9..97e32ef 100644
--- a/admin/src/auth/AuthProvider.tsx
+++ b/admin/src/auth/AuthProvider.tsx
@@ -1,5 +1,5 @@
-import { type SignInInput, getCurrentUser, signIn, signOut } from "aws-amplify/auth";
-import { type ReactNode, createContext, useContext, useEffect, useState } from "react";
+import { getCurrentUser, type SignInInput, signIn, signOut } from "aws-amplify/auth";
+import { createContext, type ReactNode, useContext, useEffect, useState } from "react";
interface AuthContextValue {
isAuthenticated: boolean;
diff --git a/biome.json b/biome.json
index d26abb7..a0b604d 100644
--- a/biome.json
+++ b/biome.json
@@ -1,7 +1,7 @@
{
- "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
+ "$schema": "https://biomejs.dev/schemas/2.4.2/schema.json",
"files": {
- "include": ["viewer/src/**", "admin/src/**"]
+ "includes": ["**/viewer/src/**", "**/admin/src/**"]
},
"formatter": {
"indentStyle": "space",
diff --git a/package-lock.json b/package-lock.json
index 73b9290..ad16449 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,15 +5,14 @@
"packages": {
"": {
"devDependencies": {
- "@biomejs/biome": "^1"
+ "@biomejs/biome": "^2"
}
},
"node_modules/@biomejs/biome": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz",
- "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.2.tgz",
+ "integrity": "sha512-vVE/FqLxNLbvYnFDYg3Xfrh1UdFhmPT5i+yPT9GE2nTUgI4rkqo5krw5wK19YHBd7aE7J6r91RRmb8RWwkjy6w==",
"dev": true,
- "hasInstallScript": true,
"license": "MIT OR Apache-2.0",
"bin": {
"biome": "bin/biome"
@@ -26,20 +25,20 @@
"url": "https://opencollective.com/biome"
},
"optionalDependencies": {
- "@biomejs/cli-darwin-arm64": "1.9.4",
- "@biomejs/cli-darwin-x64": "1.9.4",
- "@biomejs/cli-linux-arm64": "1.9.4",
- "@biomejs/cli-linux-arm64-musl": "1.9.4",
- "@biomejs/cli-linux-x64": "1.9.4",
- "@biomejs/cli-linux-x64-musl": "1.9.4",
- "@biomejs/cli-win32-arm64": "1.9.4",
- "@biomejs/cli-win32-x64": "1.9.4"
+ "@biomejs/cli-darwin-arm64": "2.4.2",
+ "@biomejs/cli-darwin-x64": "2.4.2",
+ "@biomejs/cli-linux-arm64": "2.4.2",
+ "@biomejs/cli-linux-arm64-musl": "2.4.2",
+ "@biomejs/cli-linux-x64": "2.4.2",
+ "@biomejs/cli-linux-x64-musl": "2.4.2",
+ "@biomejs/cli-win32-arm64": "2.4.2",
+ "@biomejs/cli-win32-x64": "2.4.2"
}
},
"node_modules/@biomejs/cli-darwin-arm64": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz",
- "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.2.tgz",
+ "integrity": "sha512-3pEcKCP/1POKyaZZhXcxFl3+d9njmeAihZ17k8lL/1vk+6e0Cbf0yPzKItFiT+5Yh6TQA4uKvnlqe0oVZwRxCA==",
"cpu": [
"arm64"
],
@@ -54,9 +53,9 @@
}
},
"node_modules/@biomejs/cli-darwin-x64": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz",
- "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.2.tgz",
+ "integrity": "sha512-P7hK1jLVny+0R9UwyGcECxO6sjETxfPyBm/1dmFjnDOHgdDPjPqozByunrwh4xPKld8sxOr5eAsSqal5uKgeBg==",
"cpu": [
"x64"
],
@@ -71,9 +70,9 @@
}
},
"node_modules/@biomejs/cli-linux-arm64": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz",
- "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.2.tgz",
+ "integrity": "sha512-DI3Mi7GT2zYNgUTDEbSjl3e1KhoP76OjQdm8JpvZYZWtVDRyLd3w8llSr2TWk1z+U3P44kUBWY3X7H9MD1/DGQ==",
"cpu": [
"arm64"
],
@@ -88,9 +87,9 @@
}
},
"node_modules/@biomejs/cli-linux-arm64-musl": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz",
- "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.2.tgz",
+ "integrity": "sha512-/x04YK9+7erw6tYEcJv9WXoBHcULI/wMOvNdAyE9S3JStZZ9yJyV67sWAI+90UHuDo/BDhq0d96LDqGlSVv7WA==",
"cpu": [
"arm64"
],
@@ -105,9 +104,9 @@
}
},
"node_modules/@biomejs/cli-linux-x64": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz",
- "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.2.tgz",
+ "integrity": "sha512-GK2ErnrKpWFigYP68cXiCHK4RTL4IUWhK92AFS3U28X/nuAL5+hTuy6hyobc8JZRSt+upXt1nXChK+tuHHx4mA==",
"cpu": [
"x64"
],
@@ -122,9 +121,9 @@
}
},
"node_modules/@biomejs/cli-linux-x64-musl": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz",
- "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.2.tgz",
+ "integrity": "sha512-wbBmTkeAoAYbOQ33f6sfKG7pcRSydQiF+dTYOBjJsnXO2mWEOQHllKlC2YVnedqZFERp2WZhFUoO7TNRwnwEHQ==",
"cpu": [
"x64"
],
@@ -139,9 +138,9 @@
}
},
"node_modules/@biomejs/cli-win32-arm64": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz",
- "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.2.tgz",
+ "integrity": "sha512-k2uqwLYrNNxnaoiW3RJxoMGnbKda8FuCmtYG3cOtVljs3CzWxaTR+AoXwKGHscC9thax9R4kOrtWqWN0+KdPTw==",
"cpu": [
"arm64"
],
@@ -156,9 +155,9 @@
}
},
"node_modules/@biomejs/cli-win32-x64": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz",
- "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.2.tgz",
+ "integrity": "sha512-9ma7C4g8Sq3cBlRJD2yrsHXB1mnnEBdpy7PhvFrylQWQb4PoyCmPucdX7frvsSBQuFtIiKCrolPl/8tCZrKvgQ==",
"cpu": [
"x64"
],
diff --git a/package.json b/package.json
index e8d9f3d..57a27e6 100644
--- a/package.json
+++ b/package.json
@@ -5,6 +5,6 @@
"fix": "biome check --write ."
},
"devDependencies": {
- "@biomejs/biome": "^1"
+ "@biomejs/biome": "^2"
}
}
diff --git a/viewer/src/AppLayout.tsx b/viewer/src/AppLayout.tsx
index 3d62b3f..6a224b3 100644
--- a/viewer/src/AppLayout.tsx
+++ b/viewer/src/AppLayout.tsx
@@ -3,7 +3,7 @@ import { useEffect, useState } from "react";
import { Outlet, useMatch, useNavigate, useParams } from "react-router-dom";
import { fetchEvents, fetchExclusions } from "./api";
import { formatPeriod } from "./formatters";
-import { getHighestQuest } from "./routeUtils";
+import { getHighestQuest, parseLevel } from "./routeUtils";
import type { EventData, ExclusionsMap } from "./types";
const navBtnStyle: React.CSSProperties = {
@@ -32,13 +32,20 @@ export function AppLayout() {
const eventItemSummaryMatch = useMatch("/events/:eventId/event-items");
useEffect(() => {
- Promise.all([fetchEvents(), fetchExclusions()])
+ const controller = new AbortController();
+ Promise.all([fetchEvents(controller.signal), fetchExclusions(controller.signal)])
.then(([eventsRes, exclusionsRes]) => {
setEvents(eventsRes.events);
setExclusions(exclusionsRes);
})
- .catch((e: unknown) => setError(e instanceof Error ? e.message : String(e)))
- .finally(() => setLoading(false));
+ .catch((e: unknown) => {
+ if (e instanceof DOMException && e.name === "AbortError") return;
+ setError(e instanceof Error ? e.message : String(e));
+ })
+ .finally(() => {
+ if (!controller.signal.aborted) setLoading(false);
+ });
+ return () => controller.abort();
}, []);
if (loading) return
読み込み中...
;
@@ -92,7 +99,7 @@ export function AppLayout() {
{selectedEvent && selectedEvent.quests.length > 0 && (
{[...selectedEvent.quests]
- .sort((a, b) => Number(a.level) - Number(b.level))
+ .sort((a, b) => parseLevel(a.level) - parseLevel(b.level))
.map((q) => (