From 674e1c76093fc94d5ab74bdaaa46b05c51c46196 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Thu, 27 Mar 2025 16:44:04 -0400 Subject: [PATCH 01/93] Added initial tag. --- components/SignInMenu.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/components/SignInMenu.tsx b/components/SignInMenu.tsx index 1c9ae53b..f34cb64b 100644 --- a/components/SignInMenu.tsx +++ b/components/SignInMenu.tsx @@ -60,6 +60,7 @@ function SignInCard() {

Sign In

{error &&

{error}

}

Choose a login provider

+

We currently only support signing in with one login provider

)}
From 76402d2a90dd97d216f5a5cff7ebd9ea919dc2f4 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 16:35:38 -0400 Subject: [PATCH 33/93] Making paragraph hidden --- pages/[teamSlug]/[seasonSlug]/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/[teamSlug]/[seasonSlug]/index.tsx b/pages/[teamSlug]/[seasonSlug]/index.tsx index eb041aea..5c1d4da6 100644 --- a/pages/[teamSlug]/[seasonSlug]/index.tsx +++ b/pages/[teamSlug]/[seasonSlug]/index.tsx @@ -72,10 +72,10 @@ export default function Home(props: SeasonPageProps) { {owner && ( )}
From 008acf36bfeb875a684f3a22f0f800fe33c2635c Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Mon, 31 Mar 2025 17:01:14 -0400 Subject: [PATCH 34/93] Fix sign in --- lib/MongoDB.ts | 24 +++++------- lib/testutils/TestUtils.ts | 2 +- package-lock.json | 8 ++-- package.json | 2 +- playwright.config.ts | 1 + tests/e2e/misc.spec.ts | 12 ++++++ tests/unit/lib/api/ClientApi.test.ts | 55 ++++++++++++++++++++++++++++ 7 files changed, 84 insertions(+), 20 deletions(-) diff --git a/lib/MongoDB.ts b/lib/MongoDB.ts index 78c0fa5c..f1ae7e1a 100644 --- a/lib/MongoDB.ts +++ b/lib/MongoDB.ts @@ -35,9 +35,7 @@ let clientPromise: Promise; if (uri && !global.clientPromise) { client = new MongoClient(uri, options); - global.clientPromise = client - .connect() - .then(() => console.error("MongoDB connected.")); + global.clientPromise = client.connect(); } clientPromise = global.clientPromise; @@ -46,21 +44,19 @@ export { clientPromise }; export async function getDatabase( useCache: boolean = true, ): Promise { - if (!global.interface) { - await clientPromise; + if (global.interface) return global.interface; // Return the existing instance if already created - const mongo = new MongoDBInterface(clientPromise); + await clientPromise; - const dbInterface = useCache - ? new CachedDbInterface(mongo, cacheOptions) - : mongo; - await dbInterface.init(); - global.interface = dbInterface; + const mongo = new MongoDBInterface(clientPromise); - return dbInterface; - } + const dbInterface = useCache + ? new CachedDbInterface(mongo, cacheOptions) + : mongo; + await dbInterface.init(); + global.interface = dbInterface; - return global.interface; + return dbInterface; } export class MongoDBInterface diff --git a/lib/testutils/TestUtils.ts b/lib/testutils/TestUtils.ts index 4df6f588..6d4c01df 100644 --- a/lib/testutils/TestUtils.ts +++ b/lib/testutils/TestUtils.ts @@ -179,7 +179,7 @@ export namespace PlaywrightUtils { await context.addCookies([ { - name: "__Secure-next-auth.session-token", + name: "next-auth.session-token", value: sessionToken, path: "/", domain: "localhost", diff --git a/package-lock.json b/package-lock.json index 277a3200..4759a53c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "jose": "^6.0.10", "levenary": "^1.1.1", "minimongo": "^7.0.0", - "mongo-anywhere": "^1.1.11", + "mongo-anywhere": "^1.1.15", "mongodb": "^5.0.0", "next": "^15.2.3", "next-auth": "^4.24.11", @@ -8322,9 +8322,9 @@ } }, "node_modules/mongo-anywhere": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/mongo-anywhere/-/mongo-anywhere-1.1.11.tgz", - "integrity": "sha512-wM5FMS7sj6vZAEw9XaRaWFYqNeA8slKcQxxWdhyN4a8xGBrOxN2U4wF33kuAkYTgqsdy5fxS3NSF4KkQAUq5Zg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/mongo-anywhere/-/mongo-anywhere-1.1.15.tgz", + "integrity": "sha512-wN6E/jN0lae5EqAeaAaE5fdUdb+ZchZKib3FWGOOOQUYZvTv2ino9Aii3GK+uIMxNdnm6N//B0bEGEeCNbBy1g==", "dependencies": { "bson": "^5.0.0", "minimongo": "^6.19.0", diff --git a/package.json b/package.json index 38a06059..066245ab 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "jose": "^6.0.10", "levenary": "^1.1.1", "minimongo": "^7.0.0", - "mongo-anywhere": "^1.1.11", + "mongo-anywhere": "^1.1.15", "mongodb": "^5.0.0", "next": "^15.2.3", "next-auth": "^4.24.11", diff --git a/playwright.config.ts b/playwright.config.ts index c321927d..21b6e8f9 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -31,6 +31,7 @@ export default defineConfig({ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: "on-first-retry", + video: "retain-on-failure", // Record video only for failed tests }, /* Configure projects for major browsers */ diff --git a/tests/e2e/misc.spec.ts b/tests/e2e/misc.spec.ts index 161f67e6..b60bb200 100644 --- a/tests/e2e/misc.spec.ts +++ b/tests/e2e/misc.spec.ts @@ -4,7 +4,19 @@ import { PlaywrightUtils } from "@/lib/testutils/TestUtils"; test("Sign in function signs in", async ({ page, context }) => { const { user } = await PlaywrightUtils.signIn(context); + const sessionToken = await context + .cookies() + .then( + (cookies) => + cookies.find((cookie) => cookie.name === "next-auth.session-token") + ?.value, + ); + + expect(sessionToken).toBeDefined(); + expect(sessionToken).not.toBe(""); + const res = await context.request.get("/api/auth/session"); + const foundUser = (await res.json()).user; if (foundUser) foundUser.id = user.id; // ID mismatches are normal diff --git a/tests/unit/lib/api/ClientApi.test.ts b/tests/unit/lib/api/ClientApi.test.ts index 24b6c6ad..a10478de 100644 --- a/tests/unit/lib/api/ClientApi.test.ts +++ b/tests/unit/lib/api/ClientApi.test.ts @@ -1107,3 +1107,58 @@ describe(`${ClientApi.name}.${api.changeTeamNumberForReport.name}`, () => { ); }); }); + +describe(`${ClientApi.name}.${api.testSignIn.name}`, () => { + test("Returns user", async () => { + const { db, res } = await getTestApiUtils(); + + await api.testSignIn.handler(...(await getTestApiParams(res, { db }, []))); + + const { user } = res.send.mock.calls[0][0] as { + user: User; + }; + + expect(user).toBeDefined(); + expect(user._id).toBeDefined(); + expect( + await db.findObjectById(CollectionId.Users, new ObjectId(user._id!)), + ).toEqual(user); + }); + + test("Returns valid sessionToken", async () => { + const { db, res } = await getTestApiUtils(); + + await api.testSignIn.handler(...(await getTestApiParams(res, { db }, []))); + + const { sessionToken } = res.send.mock.calls[0][0] as { + sessionToken: string; + }; + + expect(sessionToken).toBeDefined(); + expect(sessionToken).not.toBe(""); + + const session = await db.findObject(CollectionId.Sessions, { + sessionToken, + }); + expect(session).toBeDefined(); + }); + + test("Session has correct userId", async () => { + const { db, res } = await getTestApiUtils(); + + await api.testSignIn.handler(...(await getTestApiParams(res, { db }, []))); + + const { user, sessionToken } = res.send.mock.calls[0][0] as { + user: User; + sessionToken: string; + }; + + expect(sessionToken).toBeDefined(); + + const session = await db.findObject(CollectionId.Sessions, { + sessionToken, + }); + expect(session).toBeDefined(); + expect(session?.userId).toEqual(user._id); + }); +}); From 6a383805e6f51111cdd5f22483c38f3e9cb34e71 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:01:25 -0400 Subject: [PATCH 35/93] Tried to add an xs style, realized one shouldn't exist, not sure what these changes are. --- pages/[teamSlug]/[seasonSlug]/index.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pages/[teamSlug]/[seasonSlug]/index.tsx b/pages/[teamSlug]/[seasonSlug]/index.tsx index 5c1d4da6..817f824a 100644 --- a/pages/[teamSlug]/[seasonSlug]/index.tsx +++ b/pages/[teamSlug]/[seasonSlug]/index.tsx @@ -72,10 +72,12 @@ export default function Home(props: SeasonPageProps) { {owner && ( )}
From 1e023b3a1e454a719211addf862afd901be7e9a5 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:09:37 -0400 Subject: [PATCH 36/93] Removes the text on xs devices. --- pages/[teamSlug]/[seasonSlug]/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/[teamSlug]/[seasonSlug]/index.tsx b/pages/[teamSlug]/[seasonSlug]/index.tsx index 817f824a..60e893d3 100644 --- a/pages/[teamSlug]/[seasonSlug]/index.tsx +++ b/pages/[teamSlug]/[seasonSlug]/index.tsx @@ -75,7 +75,7 @@ export default function Home(props: SeasonPageProps) { className="w-1/6 sm:1/8 h-1/4 btn btn-sm btn-error flex" > -

+

Delete Season

From cfa49d169a28b22f6436ec63a235d31e26f9688b Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:22:14 -0400 Subject: [PATCH 37/93] Adds break and makes the thing work --- pages/[teamSlug]/[seasonSlug]/index.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pages/[teamSlug]/[seasonSlug]/index.tsx b/pages/[teamSlug]/[seasonSlug]/index.tsx index 60e893d3..f76edbaa 100644 --- a/pages/[teamSlug]/[seasonSlug]/index.tsx +++ b/pages/[teamSlug]/[seasonSlug]/index.tsx @@ -75,8 +75,9 @@ export default function Home(props: SeasonPageProps) { className="w-1/6 sm:1/8 h-1/4 btn btn-sm btn-error flex" > -

- Delete Season +

+ Delete +
Season

)} From 6e7f84107b4f4e3a27ddeeddcaf2fcd1a8def019 Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Mon, 31 Mar 2025 17:32:09 -0400 Subject: [PATCH 38/93] Fixed some profile tests --- lib/testutils/TestUtils.ts | 16 ++++++++++------ pages/profile.tsx | 2 +- tests/e2e/misc.spec.ts | 4 ++-- tests/e2e/profile.spec.ts | 22 +++++++++++++++++----- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/lib/testutils/TestUtils.ts b/lib/testutils/TestUtils.ts index 6d4c01df..3ff8963a 100644 --- a/lib/testutils/TestUtils.ts +++ b/lib/testutils/TestUtils.ts @@ -174,9 +174,18 @@ export namespace PlaywrightUtils { return api; } - export async function signIn(context: BrowserContext) { + export async function signUp(context: BrowserContext) { const { sessionToken, user } = await getTestClientApi().testSignIn(); + await signIn(context, sessionToken); + + return { + sessionToken, + user, + }; + } + + export async function signIn(context: BrowserContext, sessionToken: string) { await context.addCookies([ { name: "next-auth.session-token", @@ -189,10 +198,5 @@ export namespace PlaywrightUtils { expires: Math.floor(Date.now() / 1000) + 60 * 60 * 24, // 1 day expiration }, ]); - - return { - sessionToken, - user, - }; } } diff --git a/pages/profile.tsx b/pages/profile.tsx index b3db52db..8bc972f5 100644 --- a/pages/profile.tsx +++ b/pages/profile.tsx @@ -91,7 +91,7 @@ export default function Profile(props: { teamList: Team[] }) { hideMenu={false} title="Profile" > - + {/* */} { - const { user } = await PlaywrightUtils.signIn(context); +test("Sign up function signs up", async ({ page, context }) => { + const { user } = await PlaywrightUtils.signUp(context); const sessionToken = await context .cookies() diff --git a/tests/e2e/profile.spec.ts b/tests/e2e/profile.spec.ts index 15919ebd..b82ac4d7 100644 --- a/tests/e2e/profile.spec.ts +++ b/tests/e2e/profile.spec.ts @@ -1,12 +1,24 @@ import { PlaywrightUtils } from "@/lib/testutils/TestUtils"; import { test, expect } from "@playwright/test"; -test("Displays username", async ({ page, context }) => { - const { user } = await PlaywrightUtils.signIn(context); +test("Displays sign in page when not signed in", async ({ page }) => { + await page.goto("/profile"); + + await expect( + page.getByRole("heading", { name: /sign in/i }).first(), + ).toBeVisible(); +}); + +test("Displays user information when signed in", async ({ page, context }) => { + const { user } = await PlaywrightUtils.signUp(context); await page.goto("/profile"); - expect(page.getByText(new RegExp(user.name!))).toBeVisible({ - timeout: 30000, - }); + await expect( + page.getByRole("heading", { name: /sign in/i }).first(), + ).not.toBeVisible(); + + await expect(page.getByText(user.email!)).toBeVisible(); + await expect(page.getByText(user.slug!)).toBeVisible(); + await expect(page.getByText(new RegExp(user.name!))).toBeVisible(); }); From f690bf6d4f6885eb368976b39adda5e34ebab9a5 Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Mon, 31 Mar 2025 17:42:16 -0400 Subject: [PATCH 39/93] Increase retries and workers for CI in Playwright configuration --- playwright.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/playwright.config.ts b/playwright.config.ts index 21b6e8f9..ac46cdbf 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -16,9 +16,9 @@ export default defineConfig({ /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, + retries: process.env.CI ? 5 : 0, /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, + workers: process.env.CI ? 2 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: "html", From 9234dd215c99ef05b1e1b9a4e00abb7ca72d962c Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:29:54 -0400 Subject: [PATCH 40/93] almost got it working. --- lib/client/StatsMath.ts | 15 +++++++++++++++ lib/games.ts | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/lib/client/StatsMath.ts b/lib/client/StatsMath.ts index 855d0b68..79dcf30f 100644 --- a/lib/client/StatsMath.ts +++ b/lib/client/StatsMath.ts @@ -1,4 +1,5 @@ import { QuantData, Report } from "../Types"; +import {Reefscape} from "../games" export const SpeakerAutoPoints = 5; export const SpeakerTeleopPoints = 2; @@ -146,3 +147,17 @@ export function ComparativePercentMulti( return results; } + +export function GetMinimum( + quantitativeReports: Report[], + stat: string, +) { + if (!quantitativeReports) return 0; + let minimum = 0; + for (let repo of quantitativeReports) { + if (repo.data.AutoCoralScoredLevelOne > minimum) { + minimum = repo.data["AutoCoralScoredLevelOne"]; + } + } + return minimum; +} diff --git a/lib/games.ts b/lib/games.ts index fff434e3..a676a429 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -22,6 +22,7 @@ import { AmpAutoPoints, AmpTeleopPoints, BooleanAverage, + GetMinimum, MostCommonValue, NumericalTotal, Round, @@ -29,6 +30,7 @@ import { SpeakerTeleopPoints, TrapPoints, } from "./client/StatsMath"; +import { report } from "process"; function getBaseBadges( pitReport: Pitreport | undefined, @@ -1324,6 +1326,12 @@ namespace Reefscape { sections: { Auto: [ { key: "AutoMovedPastStaringLine", label: "Avg Auto Moves Past Start" }, + { + label: "Min Auto L1 Coral", + get(pitData, quantitativeReports) { + GetMinimum(quantitativeReports, "AutoCoralScoredLevelOne") + }, + }, { key: "AutoCoralScoredLevelOne", label: "Avg Amt Of Coral Scored Level One Auto", From bab7bae4dc3bf51bc56f74939e61880b4a9639df Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:30:23 -0400 Subject: [PATCH 41/93] export Reeefscape namespace --- lib/games.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/games.ts b/lib/games.ts index a676a429..95ed324f 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -1167,7 +1167,7 @@ export namespace IntoTheDeep { ); } -namespace Reefscape { +export namespace Reefscape { export class QuantitativeData extends QuantData { AutoMovedPastStartingline: boolean = false; From 3122e3b243787589f6936529ee8084db1671888e Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:34:13 -0400 Subject: [PATCH 42/93] got it /functional/ still lots of work to do --- lib/games.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/games.ts b/lib/games.ts index 95ed324f..e17ca0f4 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -1329,7 +1329,7 @@ export namespace Reefscape { { label: "Min Auto L1 Coral", get(pitData, quantitativeReports) { - GetMinimum(quantitativeReports, "AutoCoralScoredLevelOne") + return GetMinimum(quantitativeReports!, "AutoCoralScoredLevelOne"); }, }, { From eae73323ac4d15f4575e5fdc6b83cb9fe2659b13 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:39:09 -0400 Subject: [PATCH 43/93] adding getMaximum --- lib/client/StatsMath.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/client/StatsMath.ts b/lib/client/StatsMath.ts index 79dcf30f..dc480847 100644 --- a/lib/client/StatsMath.ts +++ b/lib/client/StatsMath.ts @@ -1,5 +1,5 @@ import { QuantData, Report } from "../Types"; -import {Reefscape} from "../games" +import { Reefscape } from "../games"; export const SpeakerAutoPoints = 5; export const SpeakerTeleopPoints = 2; @@ -161,3 +161,17 @@ export function GetMinimum( } return minimum; } + +export function GetMaximum( + quantitativeReports: Report[], + stat: string, +) { + if (!quantitativeReports) return 0; + let minimum = 0; + for (let repo of quantitativeReports) { + if (repo.data.AutoCoralScoredLevelOne > minimum) { + minimum = repo.data["AutoCoralScoredLevelOne"]; + } + } + return minimum; +} \ No newline at end of file From ca22b80ee8438cf88f8a0bf5598cbd1ab6b6fc77 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:39:37 -0400 Subject: [PATCH 44/93] fixing the math in GetMinimum --- lib/client/StatsMath.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/client/StatsMath.ts b/lib/client/StatsMath.ts index dc480847..d992fb3c 100644 --- a/lib/client/StatsMath.ts +++ b/lib/client/StatsMath.ts @@ -153,9 +153,9 @@ export function GetMinimum( stat: string, ) { if (!quantitativeReports) return 0; - let minimum = 0; + let minimum = quantitativeReports[0].data["AutoCoralScoredLevelOne"]; for (let repo of quantitativeReports) { - if (repo.data.AutoCoralScoredLevelOne > minimum) { + if (repo.data.AutoCoralScoredLevelOne < minimum) { minimum = repo.data["AutoCoralScoredLevelOne"]; } } @@ -174,4 +174,4 @@ export function GetMaximum( } } return minimum; -} \ No newline at end of file +} From ee987e343c7c6c3227739e8b44e5917ffca34d75 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:42:03 -0400 Subject: [PATCH 45/93] switch from hardcode to parameter for determining calculated stat --- lib/client/StatsMath.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/client/StatsMath.ts b/lib/client/StatsMath.ts index d992fb3c..f347332d 100644 --- a/lib/client/StatsMath.ts +++ b/lib/client/StatsMath.ts @@ -153,10 +153,10 @@ export function GetMinimum( stat: string, ) { if (!quantitativeReports) return 0; - let minimum = quantitativeReports[0].data["AutoCoralScoredLevelOne"]; + let minimum = quantitativeReports[0].data[stat]; for (let repo of quantitativeReports) { if (repo.data.AutoCoralScoredLevelOne < minimum) { - minimum = repo.data["AutoCoralScoredLevelOne"]; + minimum = repo.data[stat]; } } return minimum; From 3ccbbe199a40bf2cb37e5482e7a668f64c3ae067 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:43:49 -0400 Subject: [PATCH 46/93] Add comments explaining what the functions do. --- lib/client/StatsMath.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/client/StatsMath.ts b/lib/client/StatsMath.ts index f347332d..a0e78d97 100644 --- a/lib/client/StatsMath.ts +++ b/lib/client/StatsMath.ts @@ -148,6 +148,7 @@ export function ComparativePercentMulti( return results; } +//Takes a list of Quantitative reports and a stat and returns the minimum value recorded for said stat export function GetMinimum( quantitativeReports: Report[], stat: string, @@ -162,6 +163,7 @@ export function GetMinimum( return minimum; } +//Takes a list of Quantitative reports and a stat and returns the maximum value recorded for said stat export function GetMaximum( quantitativeReports: Report[], stat: string, From fab5527477f088eef5a39215f899486a20507615 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:45:01 -0400 Subject: [PATCH 47/93] Change GetMaximum variable name from minimum to maximum --- lib/client/StatsMath.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/client/StatsMath.ts b/lib/client/StatsMath.ts index a0e78d97..4b54538a 100644 --- a/lib/client/StatsMath.ts +++ b/lib/client/StatsMath.ts @@ -169,11 +169,11 @@ export function GetMaximum( stat: string, ) { if (!quantitativeReports) return 0; - let minimum = 0; + let maximum = 0; for (let repo of quantitativeReports) { - if (repo.data.AutoCoralScoredLevelOne > minimum) { - minimum = repo.data["AutoCoralScoredLevelOne"]; + if (repo.data.AutoCoralScoredLevelOne > maximum) { + maximum = repo.data["AutoCoralScoredLevelOne"]; } } - return minimum; + return maximum; } From e5069984f548926beae8152acb8b129afe01e74e Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:03:40 -0400 Subject: [PATCH 48/93] Move labels below. --- lib/games.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/games.ts b/lib/games.ts index e17ca0f4..520dd7c7 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -31,6 +31,7 @@ import { TrapPoints, } from "./client/StatsMath"; import { report } from "process"; +import { GetMaximum } from './client/StatsMath'; function getBaseBadges( pitReport: Pitreport | undefined, @@ -1326,6 +1327,10 @@ export namespace Reefscape { sections: { Auto: [ { key: "AutoMovedPastStaringLine", label: "Avg Auto Moves Past Start" }, + { + key: "AutoCoralScoredLevelOne", + label: "Avg Amt Of Coral Scored Level One Auto", + }, { label: "Min Auto L1 Coral", get(pitData, quantitativeReports) { @@ -1333,8 +1338,10 @@ export namespace Reefscape { }, }, { - key: "AutoCoralScoredLevelOne", - label: "Avg Amt Of Coral Scored Level One Auto", + label: "Max Auto L1 Coral", + get(pitData, quantitativeReports) { + return GetMaximum(quantitativeReports!, "AutoCoralScoredLevelOne"); + }, }, { key: "AutoCoralScoredLevelTwo", From e481a18bc0773a2277252617c0e36cadd54fb58d Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:19:31 -0400 Subject: [PATCH 49/93] commit --- lib/games.ts | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/games.ts b/lib/games.ts index 520dd7c7..8ea8a794 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -1329,24 +1329,37 @@ export namespace Reefscape { { key: "AutoMovedPastStaringLine", label: "Avg Auto Moves Past Start" }, { key: "AutoCoralScoredLevelOne", - label: "Avg Amt Of Coral Scored Level One Auto", + label: ">>Avg Amt Of Coral Scored Level One Auto", }, { - label: "Min Auto L1 Coral", + label: ">>>>>Min Auto L1 Coral", get(pitData, quantitativeReports) { return GetMinimum(quantitativeReports!, "AutoCoralScoredLevelOne"); }, }, { - label: "Max Auto L1 Coral", + label: ">>>>>Max Auto L1 Coral", get(pitData, quantitativeReports) { return GetMaximum(quantitativeReports!, "AutoCoralScoredLevelOne"); }, }, { key: "AutoCoralScoredLevelTwo", - label: "Avg Amt Of Coral Scored Level Two Auto", + label: ">>Avg Amt Of Coral Scored Level Two Auto", }, + { + label: ">>>>>Min Auto L2 Coral", + get(pitData, quantitativeReports) { + return GetMinimum(quantitativeReports!, "AutoCoralScoredLevelTwo"); + }, + }, + { + label: ">>>>>Max Auto L2 Coral", + get(pitData, quantitativeReports) { + return GetMaximum(quantitativeReports!, "AutoCoralScoredLevelTwo"); + }, + }, + {label:""}, { key: "AutoCoralScoredLevelThree", label: "Avg Amt Of Coral Scored Level Three Auto", From a5953b994d0ce5c4f72dd0568d8696c5fbc764d7 Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Tue, 1 Apr 2025 16:26:26 -0400 Subject: [PATCH 50/93] Don't add BASE_URL twice --- lib/testutils/TestUtils.ts | 26 +++++++++++++++++++++++--- package-lock.json | 16 ++++++++-------- package.json | 2 +- playwright.config.ts | 3 ++- tests/e2e/misc.spec.ts | 6 +----- tests/e2e/profile.spec.ts | 4 ++++ 6 files changed, 39 insertions(+), 18 deletions(-) diff --git a/lib/testutils/TestUtils.ts b/lib/testutils/TestUtils.ts index 3ff8963a..fe8437b4 100644 --- a/lib/testutils/TestUtils.ts +++ b/lib/testutils/TestUtils.ts @@ -167,9 +167,14 @@ export namespace PlaywrightUtils { export function getTestClientApi() { const api = new ClientApi(); - // Relative requests don't work in Playwright apparentl - api.requestHelper.baseUrl = - process.env.BASE_URL_FOR_PLAYWRIGHT + api.requestHelper.baseUrl; + // Relative requests don't work in Playwright apparently + if ( + process.env.BASE_URL_FOR_PLAYWRIGHT && + !api.requestHelper.baseUrl.startsWith(process.env.BASE_URL_FOR_PLAYWRIGHT) + ) { + api.requestHelper.baseUrl = + process.env.BASE_URL_FOR_PLAYWRIGHT + api.requestHelper.baseUrl; + } return api; } @@ -177,6 +182,10 @@ export namespace PlaywrightUtils { export async function signUp(context: BrowserContext) { const { sessionToken, user } = await getTestClientApi().testSignIn(); + if (!sessionToken || !user) { + throw new Error("Failed to sign in"); + } + await signIn(context, sessionToken); return { @@ -199,4 +208,15 @@ export namespace PlaywrightUtils { }, ]); } + + export async function getUser(context: BrowserContext) { + const res = await context.request.get("/api/auth/session"); + + if (res.ok()) { + const { user } = await res.json(); + return user as User; + } else { + throw new Error("Failed to get user"); + } + } } diff --git a/package-lock.json b/package-lock.json index 4759a53c..23839044 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,7 +51,7 @@ "ts-node": "^10.9.2", "tsx": "^4.19.3", "typescript": "5.7.3", - "unified-api-nextjs": "^1.0.9" + "unified-api-nextjs": "^1.1.2" }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", @@ -11269,20 +11269,20 @@ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" }, "node_modules/unified-api": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/unified-api/-/unified-api-1.0.19.tgz", - "integrity": "sha512-8fQ/fnOTHtEzNTQPPQ+vlFP3jq4vje+7D8adn1yh2TETIkEvgaVvxFbfG4BKyYyp1ZRJxvLH42kYz14WlU8/6A==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unified-api/-/unified-api-1.1.3.tgz", + "integrity": "sha512-Q16K/2QggHcFMTMSguTmodae//+cbUdxGhL9+Qi0aUWVJrRsMF35nrH6Lf97nhCZFJ5SqoQuhWiVbVy37t3lzg==", "dependencies": { "omit-call-signature": "^1.0.16" } }, "node_modules/unified-api-nextjs": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/unified-api-nextjs/-/unified-api-nextjs-1.0.10.tgz", - "integrity": "sha512-EkW0g3shBuLkbCkX/I3uQHq+ug31rzsHNGEXnOZc2UHypaD5OfQjKV5irwwGtc0iucwYzkDvKKd8aX6dgXXTkQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unified-api-nextjs/-/unified-api-nextjs-1.1.2.tgz", + "integrity": "sha512-D8rzvYzuEwXnQjqNqUG9/YsFLRqqFtzs/cl9ZKh710heNpBvktVDfGC6w+PSVhx3WvrPSQ6YHdHRTo4In8KDDQ==", "dependencies": { "next": "^15.1.2", - "unified-api": "^1.0.19" + "unified-api": "^1.1.3" } }, "node_modules/update-browserslist-db": { diff --git a/package.json b/package.json index 066245ab..16213bed 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "ts-node": "^10.9.2", "tsx": "^4.19.3", "typescript": "5.7.3", - "unified-api-nextjs": "^1.0.9" + "unified-api-nextjs": "^1.1.2" }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", diff --git a/playwright.config.ts b/playwright.config.ts index ac46cdbf..d7f6ec8e 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -77,6 +77,7 @@ export default defineConfig({ command: "npm run e2e-start-server", url: baseURL, reuseExistingServer: !process.env.CI, - timeout: 5 * 60 * 1000, // 5 minutes + timeout: 5 * 60 * 1000, // 5 minutes, + stdout: "pipe", }, }); diff --git a/tests/e2e/misc.spec.ts b/tests/e2e/misc.spec.ts index f26a12f6..66bdc091 100644 --- a/tests/e2e/misc.spec.ts +++ b/tests/e2e/misc.spec.ts @@ -15,12 +15,8 @@ test("Sign up function signs up", async ({ page, context }) => { expect(sessionToken).toBeDefined(); expect(sessionToken).not.toBe(""); - const res = await context.request.get("/api/auth/session"); - - const foundUser = (await res.json()).user; - + const foundUser = await PlaywrightUtils.getUser(context); if (foundUser) foundUser.id = user.id; // ID mismatches are normal - expect(res.status()).toBe(200); expect(foundUser).toEqual(user as any); }); diff --git a/tests/e2e/profile.spec.ts b/tests/e2e/profile.spec.ts index b82ac4d7..bd37705c 100644 --- a/tests/e2e/profile.spec.ts +++ b/tests/e2e/profile.spec.ts @@ -1,3 +1,4 @@ +import { wait } from "@/lib/client/ClientUtils"; import { PlaywrightUtils } from "@/lib/testutils/TestUtils"; import { test, expect } from "@playwright/test"; @@ -14,6 +15,9 @@ test("Displays user information when signed in", async ({ page, context }) => { await page.goto("/profile"); + const foundUser = await PlaywrightUtils.getUser(context); + expect(foundUser._id).toEqual(user._id); + await expect( page.getByRole("heading", { name: /sign in/i }).first(), ).not.toBeVisible(); From 3a421558c51aa43dbc3dd463450dfd70b21a3f38 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:36:43 -0400 Subject: [PATCH 51/93] Add more stats --- lib/games.ts | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/lib/games.ts b/lib/games.ts index 8ea8a794..72989a73 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -31,7 +31,7 @@ import { TrapPoints, } from "./client/StatsMath"; import { report } from "process"; -import { GetMaximum } from './client/StatsMath'; +import { GetMaximum } from "./client/StatsMath"; function getBaseBadges( pitReport: Pitreport | undefined, @@ -1329,45 +1329,74 @@ export namespace Reefscape { { key: "AutoMovedPastStaringLine", label: "Avg Auto Moves Past Start" }, { key: "AutoCoralScoredLevelOne", - label: ">>Avg Amt Of Coral Scored Level One Auto", + label: "Avg Amt Of Coral Scored Level One Auto", }, { - label: ">>>>>Min Auto L1 Coral", + label: "> Min Auto L1 Coral", get(pitData, quantitativeReports) { return GetMinimum(quantitativeReports!, "AutoCoralScoredLevelOne"); }, }, { - label: ">>>>>Max Auto L1 Coral", + label: "> Max Auto L1 Coral", get(pitData, quantitativeReports) { return GetMaximum(quantitativeReports!, "AutoCoralScoredLevelOne"); }, }, { key: "AutoCoralScoredLevelTwo", - label: ">>Avg Amt Of Coral Scored Level Two Auto", + label: "Avg Amt Of Coral Scored Level Two Auto", }, { - label: ">>>>>Min Auto L2 Coral", + label: "> Min Auto L2 Coral", get(pitData, quantitativeReports) { return GetMinimum(quantitativeReports!, "AutoCoralScoredLevelTwo"); }, }, { - label: ">>>>>Max Auto L2 Coral", + label: "> Max Auto L2 Coral", get(pitData, quantitativeReports) { return GetMaximum(quantitativeReports!, "AutoCoralScoredLevelTwo"); }, }, - {label:""}, { key: "AutoCoralScoredLevelThree", label: "Avg Amt Of Coral Scored Level Three Auto", }, + { + label: "> Min Auto L3 Coral", + get(pitData, quantitativeReports) { + return GetMinimum( + quantitativeReports!, + "AutoCoralScoredLevelThree", + ); + }, + }, + { + label: "> Max Auto L3 Coral", + get(pitData, quantitativeReports) { + return GetMaximum( + quantitativeReports!, + "AutoCoralScoredLevelThree", + ); + }, + }, { key: "AutoCoralScoredLevelFour", label: "Avg Amt Of Coral Scored Level Four Auto", }, + { + label: "> Min Auto L4 Coral", + get(pitData, quantitativeReports) { + return GetMinimum(quantitativeReports!, "AutoCoralScoredLevelFour"); + }, + }, + { + label: "> Max Auto L4 Coral", + get(pitData, quantitativeReports) { + return GetMaximum(quantitativeReports!, "AutoCoralScoredLevelFour"); + }, + }, { label: "Avg Auto Coral", get(pitData, quantitativeReports) { From a571a31363b6f442145aa1ac092dde04318c3f5b Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Tue, 1 Apr 2025 16:38:39 -0400 Subject: [PATCH 52/93] Shard playwright CI tests --- .github/workflows/ci.yml | 24 +----------- .github/workflows/e2e_test.yml | 70 ++++++++++++++++++++++++++++++++++ playwright.config.ts | 4 +- 3 files changed, 73 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/e2e_test.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 37b1c909..6a7cd91e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,26 +68,4 @@ jobs: run: npm run lint e2e_test: - timeout-minutes: 60 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - name: Install dependencies - run: npm ci - - name: Install Playwright Browsers - run: npx playwright install --with-deps - - name: Start MongoDB - uses: supercharge/mongodb-github-action@1.12.0 - with: - mongodb-version: "8.0" - - name: Run Playwright tests - run: npm run e2e - - uses: actions/upload-artifact@v4 - if: ${{ !cancelled() }} - with: - name: playwright-report - path: playwright-report/ - retention-days: 30 + uses: ./.github/workflows/e2e_test.yml diff --git a/.github/workflows/e2e_test.yml b/.github/workflows/e2e_test.yml new file mode 100644 index 00000000..4cdc843d --- /dev/null +++ b/.github/workflows/e2e_test.yml @@ -0,0 +1,70 @@ +name: Playwright Tests +on: [workflow_dispatch, workflow_call] +jobs: + e2e_tests: + timeout-minutes: 60 + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + shardIndex: [1, 2, 3, 4] + shardTotal: [4] + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: lts/* + + - name: Install dependencies + run: npm ci + + - name: Install Playwright browsers + run: npx playwright install --with-deps + + - name: Run Playwright tests + run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} + + - name: Start MongoDB + uses: supercharge/mongodb-github-action@1.12.0 + with: + mongodb-version: "8.0" + + - name: Upload blob report to GitHub Actions Artifacts + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: blob-report-${{ matrix.shardIndex }} + path: blob-report + retention-days: 1 + + merge_reports: + # Merge reports after playwright-tests, even if some shards have failed + if: ${{ !cancelled() }} + needs: [e2e_tests] + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + - name: Install dependencies + run: npm ci + + - name: Download blob reports from GitHub Actions Artifacts + uses: actions/download-artifact@v4 + with: + path: all-blob-reports + pattern: blob-report-* + merge-multiple: true + + - name: Merge into HTML Report + run: npx playwright merge-reports --reporter html ./all-blob-reports + + - name: Upload HTML report + uses: actions/upload-artifact@v4 + with: + name: html-report--attempt-${{ github.run_attempt }} + path: playwright-report + retention-days: 14 diff --git a/playwright.config.ts b/playwright.config.ts index d7f6ec8e..c0a79019 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -18,9 +18,9 @@ export default defineConfig({ /* Retry on CI only */ retries: process.env.CI ? 5 : 0, /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 2 : undefined, + workers: process.env.CI ? 4 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: "html", + reporter: process.env.CI ? "blob" : "html", globalSetup: require.resolve("./lib/testutils/PlaywrightSetup"), From cdb45f2ac6ef3d3e2c960339e51400f6b77efc44 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:38:48 -0400 Subject: [PATCH 53/93] Remove hardcode in GetMax --- lib/client/StatsMath.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/client/StatsMath.ts b/lib/client/StatsMath.ts index 4b54538a..0055d475 100644 --- a/lib/client/StatsMath.ts +++ b/lib/client/StatsMath.ts @@ -172,7 +172,7 @@ export function GetMaximum( let maximum = 0; for (let repo of quantitativeReports) { if (repo.data.AutoCoralScoredLevelOne > maximum) { - maximum = repo.data["AutoCoralScoredLevelOne"]; + maximum = repo.data[stat]; } } return maximum; From 65e6b133951a2be5ec63d2f4b16ef9dc3269fb13 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:39:33 -0400 Subject: [PATCH 54/93] Change hardcode in check to based on stat --- lib/client/StatsMath.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/client/StatsMath.ts b/lib/client/StatsMath.ts index 0055d475..1b7f22c4 100644 --- a/lib/client/StatsMath.ts +++ b/lib/client/StatsMath.ts @@ -156,7 +156,7 @@ export function GetMinimum( if (!quantitativeReports) return 0; let minimum = quantitativeReports[0].data[stat]; for (let repo of quantitativeReports) { - if (repo.data.AutoCoralScoredLevelOne < minimum) { + if (repo.data[stat] < minimum) { minimum = repo.data[stat]; } } @@ -171,7 +171,7 @@ export function GetMaximum( if (!quantitativeReports) return 0; let maximum = 0; for (let repo of quantitativeReports) { - if (repo.data.AutoCoralScoredLevelOne > maximum) { + if (repo.data[stat] > maximum) { maximum = repo.data[stat]; } } From a78dc1fc0f74a83e25e785631b08903b7828fd26 Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Tue, 1 Apr 2025 16:43:09 -0400 Subject: [PATCH 55/93] Update Playwright test command to use npm script --- .github/workflows/e2e_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e_test.yml b/.github/workflows/e2e_test.yml index 4cdc843d..32305dfd 100644 --- a/.github/workflows/e2e_test.yml +++ b/.github/workflows/e2e_test.yml @@ -23,7 +23,7 @@ jobs: run: npx playwright install --with-deps - name: Run Playwright tests - run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} + run: npm run e2e --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} - name: Start MongoDB uses: supercharge/mongodb-github-action@1.12.0 From fe778512dc6fcc5dcf95729b96e9b21b7630917a Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:46:24 -0400 Subject: [PATCH 56/93] Complete min/max coverage for auto --- lib/games.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/lib/games.ts b/lib/games.ts index 72989a73..0182fba1 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -1419,14 +1419,50 @@ export namespace Reefscape { key: "AutoAlgaeRemovedFromReef", label: "Avg Amt of Algae Removed From Reef", }, + { + label: "> Min Algae Removed From Reef", + get(pitData, quantitativeReports) { + return GetMinimum(quantitativeReports!, "AutoAlgaeRemovedFromReef"); + }, + }, + { + label: "> Max Algae Removed From Reef", + get(pitData, quantitativeReports) { + return GetMaximum(quantitativeReports!, "AutoAlgaeRemovedFromReef"); + }, + }, { key: "AutoAlgaeScoredProcessor", label: "Avg Amt of Algae Scored Processor Auto", }, + { + label: "> Min Algae Scored In Processor", + get(pitData, quantitativeReports) { + return GetMinimum(quantitativeReports!, "AutoAlgaeScoredProcessor"); + }, + }, + { + label: "> Max Algae Scored In Processor", + get(pitData, quantitativeReports) { + return GetMaximum(quantitativeReports!, "AutoAlgaeScoredProcessor"); + }, + }, { key: "AutoAlgaeScoredNet", label: "Avg Amt of Algae Scored Net Auto", }, + { + label: "> Min Algae Scored In Net", + get(pitData, quantitativeReports) { + return GetMinimum(quantitativeReports!, "AutoAlgaeScoredNet"); + }, + }, + { + label: "> Max Algae Scored In Net", + get(pitData, quantitativeReports) { + return GetMaximum(quantitativeReports!, "AutoAlgaeScoredNet"); + }, + }, ], Teleop: [ { key: "GroundIntake", label: "Has Ground Intake?" }, From e3924a96aff2b4972551006078ed7f768db21cc3 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:46:41 -0400 Subject: [PATCH 57/93] Remove faulty stat --- lib/games.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/games.ts b/lib/games.ts index 0182fba1..99a336bf 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -1326,7 +1326,6 @@ export namespace Reefscape { const statsLayout: StatsLayout = { sections: { Auto: [ - { key: "AutoMovedPastStaringLine", label: "Avg Auto Moves Past Start" }, { key: "AutoCoralScoredLevelOne", label: "Avg Amt Of Coral Scored Level One Auto", From 36389f9ada03afebf2139fb2226c41564ea740ae Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Tue, 1 Apr 2025 16:47:30 -0400 Subject: [PATCH 58/93] Update CI workflow to set permissions and modify Playwright test command --- .github/workflows/ci.yml | 3 +++ .github/workflows/e2e_test.yml | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a7cd91e..987b7490 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,3 +69,6 @@ jobs: e2e_test: uses: ./.github/workflows/e2e_test.yml + permissions: + contents: read + pull-requests: write diff --git a/.github/workflows/e2e_test.yml b/.github/workflows/e2e_test.yml index 32305dfd..1cf1cfcd 100644 --- a/.github/workflows/e2e_test.yml +++ b/.github/workflows/e2e_test.yml @@ -22,14 +22,14 @@ jobs: - name: Install Playwright browsers run: npx playwright install --with-deps - - name: Run Playwright tests - run: npm run e2e --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} - - name: Start MongoDB uses: supercharge/mongodb-github-action@1.12.0 with: mongodb-version: "8.0" + - name: Run Playwright tests + run: npx cross-env NODE_ENV=test playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} + - name: Upload blob report to GitHub Actions Artifacts if: ${{ !cancelled() }} uses: actions/upload-artifact@v4 From 51c018dc663f1f675f52a4be3b228bf56ed10a32 Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Tue, 1 Apr 2025 16:51:36 -0400 Subject: [PATCH 59/93] Bump version to 1.3.0, add note about requiring individual shard in GitHub --- .github/workflows/e2e_test.yml | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e_test.yml b/.github/workflows/e2e_test.yml index 1cf1cfcd..e79336ca 100644 --- a/.github/workflows/e2e_test.yml +++ b/.github/workflows/e2e_test.yml @@ -7,6 +7,7 @@ jobs: strategy: fail-fast: false matrix: + # Make sure to require each shard in GitHub! shardIndex: [1, 2, 3, 4] shardTotal: [4] steps: diff --git a/package.json b/package.json index 16213bed..68384fe4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sj3", - "version": "1.2.26", + "version": "1.3.0", "private": true, "repository": "https://github.com/Decatur-Robotics/Gearbox", "license": "CC BY-NC-SA 4.0", From e2bf7e6eda8ed15279e76b37cd87a1083467a3f0 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:55:39 -0400 Subject: [PATCH 60/93] Complete coverage for teleop. --- lib/games.ts | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/lib/games.ts b/lib/games.ts index 99a336bf..73d6ef2f 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -1469,18 +1469,90 @@ export namespace Reefscape { key: "TeleopCoralScoredLevelOne", label: "Avg Amt Of Coral Scored Level One Teleop", }, + { + label: "> Min L1 Coral Scored", + get(pitData, quantitativeReports) { + return GetMinimum( + quantitativeReports!, + "TeleopCoralScoredLevelOne", + ); + }, + }, + { + label: "> Max L1 Coral Scored", + get(pitData, quantitativeReports) { + return GetMaximum( + quantitativeReports!, + "TeleopCoralScoredLevelOne", + ); + }, + }, { key: "TeleopCoralScoredLevelTwo", label: "Avg Amt Of Coral Scored Level Two Teleop", }, + { + label: "> Min L2 Coral Scored", + get(pitData, quantitativeReports) { + return GetMinimum( + quantitativeReports!, + "TeleopCoralScoredLevelTwo", + ); + }, + }, + { + label: "> Max L2 Coral Scored", + get(pitData, quantitativeReports) { + return GetMaximum( + quantitativeReports!, + "TeleopCoralScoredLevelTwo", + ); + }, + }, { key: "TeleopCoralScoredLevelThree", label: "Avg Amt Of Coral Scored Level Three Teleop", }, + { + label: "> Min L3 Coral Scored", + get(pitData, quantitativeReports) { + return GetMinimum( + quantitativeReports!, + "TeleopCoralScoredLevelThree", + ); + }, + }, + { + label: "> Max L3 Coral Scored", + get(pitData, quantitativeReports) { + return GetMaximum( + quantitativeReports!, + "TeleopCoralScoredLevelThree", + ); + }, + }, { key: "TeleopCoralScoredLevelFour", label: "Avg Amt Of Coral Scored Level Four Teleop", }, + { + label: "> Min L4 Coral Scored", + get(pitData, quantitativeReports) { + return GetMinimum( + quantitativeReports!, + "TeleopCoralScoredLevelFour", + ); + }, + }, + { + label: "> Max L4 Coral Scored", + get(pitData, quantitativeReports) { + return GetMaximum( + quantitativeReports!, + "TeleopCoralScoredLevelFour", + ); + }, + }, { label: "Avg Teleop Coral", get(pitData, quantitativeReports) { @@ -1503,14 +1575,62 @@ export namespace Reefscape { key: "TeleopAlgaeRemovedFromReef", label: "Avg Amt of Algae Removed From Reef", }, + { + label: "> Min Algae Removed From Reef", + get(pitData, quantitativeReports) { + return GetMinimum( + quantitativeReports!, + "TeleopAlgaeRemovedFromReef", + ); + }, + }, + { + label: "> Max Algae Removed From Reef", + get(pitData, quantitativeReports) { + return GetMaximum( + quantitativeReports!, + "TeleopAlgaeRemovedFromReef", + ); + }, + }, { key: "TeleopAlgaeScoredProcessor", label: "Avg Amt of Algae Scored Processor Teleop", }, + { + label: "> Min Algae Scored In Processor", + get(pitData, quantitativeReports) { + return GetMinimum( + quantitativeReports!, + "TeleopAlgaeScoredProcessor", + ); + }, + }, + { + label: "> Max Algae Scored In Processor", + get(pitData, quantitativeReports) { + return GetMaximum( + quantitativeReports!, + "TeleopAlgaeScoredProcessor", + ); + }, + }, { key: "TeleopAlgaeScoredNet", label: "Avg Amt of Algae Scored Net Teleop", }, + { + label: "> Min Algae Scored In Net", + get(pitData, quantitativeReports) { + return GetMinimum(quantitativeReports!, "TeleopAlgaeScorednet"); + }, + }, + { + label: "> Max Algae Scored In Net", + get(pitData, quantitativeReports) { + return GetMaximum(quantitativeReports!, "TeleopAlgaeScorednet"); + }, + }, ], }, getGraphDots: function ( From 71f1ea5cf5252a421ee0982d44b382102feb01ab Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 17:03:49 -0400 Subject: [PATCH 61/93] Fix Breaking Typos --- lib/games.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/games.ts b/lib/games.ts index 73d6ef2f..da8e08ac 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -1622,13 +1622,13 @@ export namespace Reefscape { { label: "> Min Algae Scored In Net", get(pitData, quantitativeReports) { - return GetMinimum(quantitativeReports!, "TeleopAlgaeScorednet"); + return GetMinimum(quantitativeReports!, "TeleopAlgaeScoredNet"); }, }, { label: "> Max Algae Scored In Net", get(pitData, quantitativeReports) { - return GetMaximum(quantitativeReports!, "TeleopAlgaeScorednet"); + return GetMaximum(quantitativeReports!, "TeleopAlgaeScoredNet"); }, }, ], From 8754455f1e6d078db3d168efd43d76e70de7a088 Mon Sep 17 00:00:00 2001 From: Davis Becker <143132652+BanEvading@users.noreply.github.com> Date: Tue, 1 Apr 2025 17:04:18 -0400 Subject: [PATCH 62/93] Remove invalid stat --- lib/games.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/games.ts b/lib/games.ts index da8e08ac..54507b65 100644 --- a/lib/games.ts +++ b/lib/games.ts @@ -1464,7 +1464,6 @@ export namespace Reefscape { }, ], Teleop: [ - { key: "GroundIntake", label: "Has Ground Intake?" }, { key: "TeleopCoralScoredLevelOne", label: "Avg Amt Of Coral Scored Level One Teleop", From bfcd3952c3959078e3eaba09a112c2d1df24cb04 Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Tue, 1 Apr 2025 17:13:24 -0400 Subject: [PATCH 63/93] Repeat tests in CI --- pages/profile.tsx | 2 ++ playwright.config.ts | 1 + tests/e2e/profile.spec.ts | 22 +++++++++++++++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pages/profile.tsx b/pages/profile.tsx index 8bc972f5..886d8448 100644 --- a/pages/profile.tsx +++ b/pages/profile.tsx @@ -103,12 +103,14 @@ export default function Profile(props: { teamList: Team[] }) { setNewName(e.target.value)} defaultValue={newName} + placeholder="New Name" className="input" /> ) : (

{user?.name}

)} + +
+ + + ); +} diff --git a/pages/profile.tsx b/pages/profile.tsx index 886d8448..c7624d80 100644 --- a/pages/profile.tsx +++ b/pages/profile.tsx @@ -22,6 +22,8 @@ import { signOut } from "next-auth/react"; import XpProgressBar from "@/components/XpProgressBar"; import { HiPencilAlt } from "react-icons/hi"; import toast from "react-hot-toast"; +import EditAvatarModal from "@/components/EditAvatarModal"; +import { close } from "fs"; const api = new ClientApi(); @@ -43,6 +45,8 @@ export default function Profile(props: { teamList: Team[] }) { const [editingName, setEditingName] = useState(false); const [newName, setNewName] = useState(); + const [editingAvatar, setEditingAvatar] = useState(false); + useEffect(() => { const loadTeams = async () => { setLoadingTeams(true); @@ -69,6 +73,10 @@ export default function Profile(props: { teamList: Team[] }) { Analytics.requestedToJoinTeam(teamNumber, user?.name ?? "Unknown User"); }; + async function toggleEditingAvatarModal() { + setEditingAvatar(!editingAvatar) + } + async function toggleEditingName() { setEditingName(!editingName); @@ -123,6 +131,12 @@ export default function Profile(props: { teamList: Team[] }) { >
+
+ {editingAvatar && + + } ); } From 5526712dc4738e99370ba5b1dd380934407ac000 Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Thu, 3 Apr 2025 18:36:12 -0400 Subject: [PATCH 76/93] Ctrl + S --- components/EditAvatarModal.tsx | 6 +++++- pages/profile.tsx | 10 +++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/components/EditAvatarModal.tsx b/components/EditAvatarModal.tsx index e457960f..045fffcc 100644 --- a/components/EditAvatarModal.tsx +++ b/components/EditAvatarModal.tsx @@ -16,7 +16,11 @@ export default function EditAvatarModal(props: { async function updateAvatar() { toast.promise( api.changePFP(newAvatar).then(() => location.reload()), - { loading: "Updating profile picture...", success: "Successfully updated profile picture!", error: "Failed to update profile picture!" }, + { + loading: "Updating profile picture...", + success: "Successfully updated profile picture!", + error: "Failed to update profile picture!", + }, ); } diff --git a/pages/profile.tsx b/pages/profile.tsx index c7624d80..b079f5e4 100644 --- a/pages/profile.tsx +++ b/pages/profile.tsx @@ -74,7 +74,7 @@ export default function Profile(props: { teamList: Team[] }) { }; async function toggleEditingAvatarModal() { - setEditingAvatar(!editingAvatar) + setEditingAvatar(!editingAvatar); } async function toggleEditingName() { @@ -284,12 +284,12 @@ export default function Profile(props: { teamList: Team[] }) {
- {editingAvatar && + {editingAvatar && ( - } + )} ); } From 5aeba61d05934bb241c85c13e23d3a29b0f0b498 Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Fri, 4 Apr 2025 08:56:15 -0400 Subject: [PATCH 77/93] Add e2e test for avatar editing functionality --- tests/e2e/profile.spec.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/e2e/profile.spec.ts b/tests/e2e/profile.spec.ts index 9c89506c..6613b9a6 100644 --- a/tests/e2e/profile.spec.ts +++ b/tests/e2e/profile.spec.ts @@ -1,3 +1,4 @@ +import Card from "@/components/Card"; import { PlaywrightUtils } from "@/lib/testutils/TestUtils"; import { test, expect } from "@playwright/test"; @@ -41,3 +42,18 @@ test.describe("Edit user name", () => { await expect(page.getByText("New Name")).toBeVisible(); }); }); + +test.describe('Edit Avatar', () => { + + test("Edit Avatar button displays popup", async ({ page }) => { + await PlaywrightUtils.signUp(page); + + await page.goto("/profile") + + const editAvatarButton = page.getByRole("button", { name: 'Edit Avatar' }) + await editAvatarButton.click(); + + const editAvatarPopup = page.getByTitle('Edit Avatar') + await expect(editAvatarPopup).toBeVisible(); + }); +}); From e79b2e657852e68a70cf003e76a334daab7778fd Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Fri, 4 Apr 2025 09:21:28 -0400 Subject: [PATCH 78/93] Ctrl + S & added Title attribute to card --- components/Card.tsx | 1 + tests/e2e/profile.spec.ts | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/Card.tsx b/components/Card.tsx index b584664a..7ae27ac0 100644 --- a/components/Card.tsx +++ b/components/Card.tsx @@ -14,6 +14,7 @@ export default function Card(props: CardProps) { return (
{color ? ( diff --git a/tests/e2e/profile.spec.ts b/tests/e2e/profile.spec.ts index 6613b9a6..684e67f4 100644 --- a/tests/e2e/profile.spec.ts +++ b/tests/e2e/profile.spec.ts @@ -43,17 +43,16 @@ test.describe("Edit user name", () => { }); }); -test.describe('Edit Avatar', () => { - +test.describe("Edit Avatar", () => { test("Edit Avatar button displays popup", async ({ page }) => { await PlaywrightUtils.signUp(page); - await page.goto("/profile") + await page.goto("/profile"); - const editAvatarButton = page.getByRole("button", { name: 'Edit Avatar' }) + const editAvatarButton = page.getByRole("button", { name: "Edit Avatar" }); await editAvatarButton.click(); - const editAvatarPopup = page.getByTitle('Edit Avatar') + const editAvatarPopup = page.getByTitle("Edit Avatar"); await expect(editAvatarPopup).toBeVisible(); }); }); From e1660bb960cf1123335aacef189bf502e5a34d77 Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Fri, 4 Apr 2025 10:12:20 -0400 Subject: [PATCH 79/93] Add altText prop to Avatar component and add remaining e2e tests for Avatar editing --- components/Avatar.tsx | 3 +- components/EditAvatarModal.tsx | 2 + tests/e2e/profile.spec.ts | 74 ++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/components/Avatar.tsx b/components/Avatar.tsx index d34af4dd..04aef25d 100644 --- a/components/Avatar.tsx +++ b/components/Avatar.tsx @@ -13,6 +13,7 @@ export default function Avatar(props: { className?: string | undefined; online?: boolean; gearSize?: number; + altText?: string; }) { const { session, status } = useCurrentSession(); const user = props.user ?? session?.user; @@ -34,7 +35,7 @@ export default function Avatar(props: { > {"Avatar"}
diff --git a/components/EditAvatarModal.tsx b/components/EditAvatarModal.tsx index 045fffcc..bb53d6fb 100644 --- a/components/EditAvatarModal.tsx +++ b/components/EditAvatarModal.tsx @@ -37,6 +37,7 @@ export default function EditAvatarModal(props: {
@@ -44,6 +45,7 @@ export default function EditAvatarModal(props: { defaultValue={props.currentImg} className="input" onChange={(e) => setNewAvatar(e.target.value)} + placeholder="Enter new avatar url" />
+
+
+ {myMatches + .filter((matchData) => showSubmittedReports || !matchData.completed) + .map((matchData) => ( + + ))} +
+ + + ); +} diff --git a/components/competition/CompHeaderCard.tsx b/components/competition/CompHeaderCard.tsx index 2222446d..012fd8ca 100644 --- a/components/competition/CompHeaderCard.tsx +++ b/components/competition/CompHeaderCard.tsx @@ -1,13 +1,31 @@ import { NotLinkedToTba } from "@/lib/client/ClientUtils"; -import { Competition } from "@/lib/Types"; +import { Competition, Match, Report } from "@/lib/Types"; +import { useState } from "react"; import { BiExport } from "react-icons/bi"; +import { FaCalendarDay } from "react-icons/fa"; import { MdAutoGraph, MdQueryStats, MdCoPresent } from "react-icons/md"; +import ViewMatchesModal from "../ViewMatchesModal"; +import { User } from "../../lib/Types"; export default function CompHeaderCard({ comp, + matches, + reports, + user, + matchPathway, }: { comp: Competition | undefined; + matches: Match[]; + reports: Report[]; + user: User | null; + matchPathway: string; }) { + const [viewMatches, setViewMatches] = useState(false); + + async function toggleViewMatches() { + setViewMatches(!viewMatches); + } + return (
@@ -36,8 +54,24 @@ export default function CompHeaderCard({ > Pit Stats +
+
+ {viewMatches && user && ( + + )}
); } diff --git a/pages/[teamSlug]/[seasonSlug]/[competitonSlug]/index.tsx b/pages/[teamSlug]/[seasonSlug]/[competitonSlug]/index.tsx index 3a01e4ee..ecb101e1 100644 --- a/pages/[teamSlug]/[seasonSlug]/[competitonSlug]/index.tsx +++ b/pages/[teamSlug]/[seasonSlug]/[competitonSlug]/index.tsx @@ -405,7 +405,13 @@ export default function CompetitionIndex({ >
- + Date: Fri, 4 Apr 2025 16:02:49 -0400 Subject: [PATCH 84/93] Add key prop to ViewMatchCard in ViewMatchesModal --- components/ViewMatchesModal.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/components/ViewMatchesModal.tsx b/components/ViewMatchesModal.tsx index 8ea27ff2..54d68b21 100644 --- a/components/ViewMatchesModal.tsx +++ b/components/ViewMatchesModal.tsx @@ -101,8 +101,11 @@ export default function ViewMatchesModal(props: {
{myMatches .filter((matchData) => showSubmittedReports || !matchData.completed) - .map((matchData) => ( - + .map((matchData, index) => ( + ))}
From 0baab922ccbba44c8b475f7b05bae7a4a0fe6f5c Mon Sep 17 00:00:00 2001 From: renatodellosso Date: Fri, 4 Apr 2025 16:26:13 -0400 Subject: [PATCH 85/93] Add export schedule as CSV, style my matches modal --- components/ViewMatchesModal.tsx | 12 +-- .../competition/InsightsAndSettingsCard.tsx | 39 +++++++- lib/api/ClientApi.ts | 95 ++++++++++++++++++- 3 files changed, 137 insertions(+), 9 deletions(-) diff --git a/components/ViewMatchesModal.tsx b/components/ViewMatchesModal.tsx index 54d68b21..fce0e314 100644 --- a/components/ViewMatchesModal.tsx +++ b/components/ViewMatchesModal.tsx @@ -6,6 +6,7 @@ import { report } from "process"; import Checkbox from "./forms/Checkboxes"; import { CheckmarkIcon } from "react-hot-toast"; import { useState } from "react"; +import { toDict } from "@/lib/client/ClientUtils"; type MatchData = { number: number; @@ -17,7 +18,10 @@ type MatchData = { function ViewMatchCard(props: MatchData) { return ( - + {props.message} { setExportPending(true); - const res = await api.exportCompAsCsv(comp?._id!).catch((e) => { + const res = await api.exportCompDataAsCsv(comp?._id!).catch((e) => { console.error(e); return { csv: undefined }; }); @@ -82,6 +82,31 @@ export default function InsightsAndSettingsCard(props: { setExportPending(false); }; + async function exportScheduleAsCsv() { + setExportPending(true); + + const res = await api.exportCompScheduleAsCsv(comp?._id!).catch((e) => { + console.error(e); + return { csv: undefined }; + }); + + if (!res) { + console.error("failed to export"); + } + + if (res.csv) { + download( + `${comp?.name ?? "Competition"}Schedule.csv`, + res.csv, + "text/csv", + ); + } else { + console.error("No CSV data returned from server"); + } + + setExportPending(false); + } + const createMatch = async () => { try { await api.createMatch( @@ -255,6 +280,18 @@ export default function InsightsAndSettingsCard(props: { "Export Scouting Data as CSV" )} +
{ }, }); - exportCompAsCsv = createNextRoute< + exportCompDataAsCsv = createNextRoute< [string], { csv: string }, ApiDependencies, @@ -1180,6 +1184,93 @@ export default class ClientApi extends NextApiTemplate { }, }); + exportCompScheduleAsCsv = createNextRoute< + [string], + { csv: string }, + ApiDependencies, + { team: Team; comp: Competition } + >({ + isAuthorized: (req, res, deps, [compId]) => + AccessLevels.IfCompOwner(req, res, deps, compId), + handler: async ( + req, + res, + { db: dbPromise, userPromise }, + { team, comp }, + [compId], + ) => { + const db = await dbPromise; + + const matches = await db.findObjects(CollectionId.Matches, { + _id: { $in: comp.matches.map((matchId) => new ObjectId(matchId)) }, + }); + const reports = await db.findObjects(CollectionId.Reports, { + match: { $in: matches.map((match) => match?._id?.toString()) }, + }); + + if (reports.length == 0) { + return res + .status(200) + .send({ error: "No reports found for competition" }); + } + + const users = await db.findObjects(CollectionId.Users, { + _id: { + $in: reports + .map((r) => r.user) + .concat(matches.map((m) => m.subjectiveScouter)) + .flat() + .map((id) => new ObjectId(id)), + }, + }); + + const reportsById = toDict(reports); + const usersById = toDict(users); + + interface Row { + matchNumber: string; + quantScouters: string[]; + subjectiveScouter: string; + } + + const rows: Row[] = [ + // Headers + { + matchNumber: "Match #", + quantScouters: matches[0].reports.map( + (_, index) => `Scouter ${index + 1}`, + ), + subjectiveScouter: "Subjective Scouter", + }, + ]; + + for (const match of matches) { + rows.push({ + matchNumber: match.number.toString(), + quantScouters: match.reports.map((id) => + reportsById[id].user ? usersById[reportsById[id].user].name! : "", + ), + subjectiveScouter: match.subjectiveScouter + ? usersById[match.subjectiveScouter].name! + : "", + }); + } + + const headers = Object.values(rows[0]).flat(); + + let csv = ""; + for (const row of rows) { + csv += + Object.values(row) + .flat() + .map((str) => str.replace(",", "")) + .join(",") + "\n"; + } + + res.status(200).send({ csv }); + }, + }); + teamCompRanking = createNextRoute< [string, number], { place: number | string; max: number | string }, From 9dbd7af6c06ee18e9da80f6121e29ccfaf127802 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 18:32:59 +0000 Subject: [PATCH 86/93] [npm]: Bump @eslint/js from 9.18.0 to 9.24.0 Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.18.0 to 9.24.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/commits/v9.24.0/packages/js) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-version: 9.24.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 19 +++++++++++++++---- package.json | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb39210a..9f11f538 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "^9.17.0", + "@eslint/js": "^9.24.0", "@jest/globals": "^29.7.0", "@playwright/test": "^1.51.1", "@types/formidable": "^3.4.5", @@ -1264,9 +1264,11 @@ } }, "node_modules/@eslint/js": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", - "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", + "version": "9.24.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz", + "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==", + "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -5515,6 +5517,15 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", diff --git a/package.json b/package.json index f4c555ba..7c331027 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "^9.17.0", + "@eslint/js": "^9.24.0", "@jest/globals": "^29.7.0", "@playwright/test": "^1.51.1", "@types/formidable": "^3.4.5", From a6ae06931f3f661b518f5d6c560a7e218417f244 Mon Sep 17 00:00:00 2001 From: Gearbox Bot Date: Mon, 7 Apr 2025 18:33:15 +0000 Subject: [PATCH 87/93] 1.3.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9f11f538..5d0e2dd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "license": "CC BY-NC-SA 4.0", "dependencies": { "dependencies": "^0.0.1", diff --git a/package.json b/package.json index 7c331027..18fd9fc2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "private": true, "repository": "https://github.com/Decatur-Robotics/Gearbox", "license": "CC BY-NC-SA 4.0", From 860d331e52a136af16f23f82064e6245839ed981 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 18:45:01 +0000 Subject: [PATCH 88/93] [npm]: Bump resend from 4.1.2 to 4.2.0 Bumps [resend](https://github.com/resendlabs/resend-node) from 4.1.2 to 4.2.0. - [Release notes](https://github.com/resendlabs/resend-node/releases) - [Commits](https://github.com/resendlabs/resend-node/compare/v4.1.2...v4.2.0) --- updated-dependencies: - dependency-name: resend dependency-version: 4.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 214 +++++++++------------------------------------- package.json | 2 +- 2 files changed, 42 insertions(+), 174 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb39210a..8ec9889d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "react-icons": "^5.5.0", "react-p5": "^1.4.1", "react-qr-code": "^2.0.15", - "resend": "^4.1.2", + "resend": "^4.2.0", "rollbar": "^2.26.4", "string-similarity-js": "^2.1.4", "ts-node": "^10.9.2", @@ -2133,11 +2133,6 @@ "node": ">= 8" } }, - "node_modules/@one-ini/wasm": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", - "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==" - }, "node_modules/@panva/hkdf": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.2.1.tgz", @@ -2210,12 +2205,13 @@ "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==" }, "node_modules/@react-email/render": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.1.tgz", - "integrity": "sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.5.tgz", + "integrity": "sha512-CA69HYXPk21HhtAXATIr+9JJwpDNmAFCvdMUjWmeoD1+KhJ9NAxusMRxKNeibdZdslmq3edaeOKGbdQ9qjK8LQ==", + "license": "MIT", "dependencies": { "html-to-text": "9.0.5", - "js-beautify": "^1.14.11", + "prettier": "3.4.2", "react-promise-suspense": "0.3.4" }, "engines": { @@ -2226,6 +2222,21 @@ "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" } }, + "node_modules/@react-email/render/node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@restart/hooks": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", @@ -2294,6 +2305,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", + "license": "MIT", "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" @@ -3079,14 +3091,6 @@ "react-dom": "^17 || ^18 || ^19" } }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -4094,15 +4098,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, "node_modules/console-polyfill": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/console-polyfill/-/console-polyfill-0.3.0.tgz", @@ -4508,6 +4503,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -4526,12 +4522,14 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -4546,6 +4544,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -4580,53 +4579,6 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/editorconfig": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", - "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", - "dependencies": { - "@one-ini/wasm": "0.1.1", - "commander": "^10.0.0", - "minimatch": "9.0.1", - "semver": "^7.5.3" - }, - "bin": { - "editorconfig": "bin/editorconfig" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/editorconfig/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==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/editorconfig/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" - } - }, - "node_modules/editorconfig/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -4702,6 +4654,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -6259,6 +6212,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "license": "MIT", "dependencies": { "@selderee/plugin-htmlparser2": "^0.11.0", "deepmerge": "^4.3.1", @@ -6281,6 +6235,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -6389,11 +6344,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", @@ -7857,75 +7807,6 @@ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, - "node_modules/js-beautify": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", - "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", - "dependencies": { - "config-chain": "^1.1.13", - "editorconfig": "^1.0.4", - "glob": "^10.3.3", - "js-cookie": "^3.0.5", - "nopt": "^7.2.0" - }, - "bin": { - "css-beautify": "js/bin/css-beautify.js", - "html-beautify": "js/bin/html-beautify.js", - "js-beautify": "js/bin/js-beautify.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/js-beautify/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==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/js-beautify/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/js-beautify/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "engines": { - "node": ">=14" - } - }, "node_modules/js-sha1": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", @@ -8078,6 +7959,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", + "license": "MIT", "funding": { "url": "https://ko-fi.com/killymxi" } @@ -8620,20 +8502,6 @@ "node": ">=6.0.0" } }, - "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -8956,6 +8824,7 @@ "version": "0.12.1", "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "license": "MIT", "dependencies": { "leac": "^0.6.0", "peberminta": "^0.9.0" @@ -9018,6 +8887,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", + "license": "MIT", "funding": { "url": "https://ko-fi.com/killymxi" } @@ -9425,11 +9295,6 @@ "react": ">=0.14.0" } }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -9705,6 +9570,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/react-promise-suspense/-/react-promise-suspense-0.3.4.tgz", "integrity": "sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^2.0.1" } @@ -9712,7 +9578,8 @@ "node_modules/react-promise-suspense/node_modules/fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==" + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "license": "MIT" }, "node_modules/react-qr-code": { "version": "2.0.15", @@ -9911,12 +9778,12 @@ } }, "node_modules/resend": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/resend/-/resend-4.1.2.tgz", - "integrity": "sha512-km0btrAj/BqIaRlS+SoLNMaCAUUWEgcEvZpycfVvoXEwAHCxU+vp/ikxPgKRkyKyiR2iDcdUq5uIBTDK9oSSSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/resend/-/resend-4.2.0.tgz", + "integrity": "sha512-s6ogU+BBYH1H6Zl926cpddtLRAJWeFv5cIKcuHLWk1QYhFTbpFJlhqx31pnN2f0CB075KFSrc1Xf6HG690wzuw==", "license": "MIT", "dependencies": { - "@react-email/render": "1.0.1" + "@react-email/render": "1.0.5" }, "engines": { "node": ">=18" @@ -10126,6 +9993,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", + "license": "MIT", "dependencies": { "parseley": "^0.12.0" }, diff --git a/package.json b/package.json index f4c555ba..a53b720c 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "react-icons": "^5.5.0", "react-p5": "^1.4.1", "react-qr-code": "^2.0.15", - "resend": "^4.1.2", + "resend": "^4.2.0", "rollbar": "^2.26.4", "string-similarity-js": "^2.1.4", "ts-node": "^10.9.2", From 58946df244b0eeb17f16ca299db0f37a9f3c2e07 Mon Sep 17 00:00:00 2001 From: Gearbox Bot Date: Mon, 7 Apr 2025 18:45:15 +0000 Subject: [PATCH 89/93] 1.3.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ec9889d..2d9310c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "license": "CC BY-NC-SA 4.0", "dependencies": { "dependencies": "^0.0.1", diff --git a/package.json b/package.json index a53b720c..3bf8913e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "private": true, "repository": "https://github.com/Decatur-Robotics/Gearbox", "license": "CC BY-NC-SA 4.0", From 7c4a9aad3363e062ecc5e2c5a228008267086f38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 18:53:35 +0000 Subject: [PATCH 90/93] [npm]: Bump eslint-config-next from 15.2.2 to 15.2.4 Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 15.2.2 to 15.2.4. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v15.2.4/packages/eslint-config-next) --- updated-dependencies: - dependency-name: eslint-config-next dependency-version: 15.2.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb39210a..2a23ac4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "bson": "^5.0.0", "dotenv": "^16.4.7", "eslint": "9.18.0", - "eslint-config-next": "15.2.2", + "eslint-config-next": "15.2.4", "formidable": "^3.5.2", "jose": "^6.0.10", "levenary": "^1.1.1", @@ -1937,9 +1937,9 @@ "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.2.tgz", - "integrity": "sha512-1+BzokFuFQIfLaRxUKf2u5In4xhPV7tUgKcK53ywvFl6+LXHWHpFkcV7VNeKlyQKUotwiq4fy/aDNF9EiUp4RQ==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.4.tgz", + "integrity": "sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==", "license": "MIT", "dependencies": { "fast-glob": "3.3.1" @@ -4998,12 +4998,12 @@ } }, "node_modules/eslint-config-next": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.2.2.tgz", - "integrity": "sha512-g34RI7RFS4HybYFwGa/okj+8WZM+/fy+pEM+aqRQoVvM4gQhKrd4wIEddKmlZfWD75j8LTwB5zwkmNv3DceH1A==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.2.4.tgz", + "integrity": "sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==", "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.2.2", + "@next/eslint-plugin-next": "15.2.4", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", diff --git a/package.json b/package.json index f4c555ba..e2db688c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "dependencies": "^0.0.1", "dotenv": "^16.4.7", "eslint": "9.18.0", - "eslint-config-next": "15.2.2", + "eslint-config-next": "15.2.4", "formidable": "^3.5.2", "jose": "^6.0.10", "levenary": "^1.1.1", From fa719f0f8a64e055bb732f334c3d1a68d78cfb27 Mon Sep 17 00:00:00 2001 From: Gearbox Bot Date: Mon, 7 Apr 2025 18:53:47 +0000 Subject: [PATCH 91/93] 1.3.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2a23ac4e..09fe76f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "license": "CC BY-NC-SA 4.0", "dependencies": { "dependencies": "^0.0.1", diff --git a/package.json b/package.json index e2db688c..afec3314 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "private": true, "repository": "https://github.com/Decatur-Robotics/Gearbox", "license": "CC BY-NC-SA 4.0", From 7995a3fd79bccfde4b1a7f7578509c814f19d8bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 18:56:44 +0000 Subject: [PATCH 92/93] [npm]: Bump @serwist/next from 9.0.11 to 9.0.13 Bumps [@serwist/next](https://github.com/serwist/serwist) from 9.0.11 to 9.0.13. - [Release notes](https://github.com/serwist/serwist/releases) - [Commits](https://github.com/serwist/serwist/compare/@serwist/next@9.0.11...@serwist/next@9.0.13) --- updated-dependencies: - dependency-name: "@serwist/next" dependency-version: 9.0.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 99 ++++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 60 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb39210a..b1333439 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "dependencies": "^0.0.1", "@next-auth/mongodb-adapter": "^1.1.3", - "@serwist/next": "^9.0.11", + "@serwist/next": "^9.0.13", "@types/http-proxy": "^1.17.15", "@types/react-dom": "18.3.1", "@types/socket.io-client": "^3.0.0", @@ -2303,15 +2303,16 @@ } }, "node_modules/@serwist/build": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@serwist/build/-/build-9.0.11.tgz", - "integrity": "sha512-mYBBpm6hWN40J/Sj2aNncVgl/o7Ch/CfyHHl3XvEecbowRuJNv8BfIch+Tvwlfd1cqBqNc65kCYvCL2XJms8DA==", + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@serwist/build/-/build-9.0.13.tgz", + "integrity": "sha512-Hoc6llxFmnsE8z5Cs95UmRRhRyoNh44OdrMWWPPX8BpW19z0CK/qnBquptjyBIe46jjoOxsPHK0Tt7oZOV4Mbw==", + "license": "MIT", "dependencies": { "common-tags": "1.8.2", "glob": "10.4.5", "pretty-bytes": "6.1.1", "source-map": "0.8.0-beta.0", - "zod": "3.23.8" + "zod": "3.24.2" }, "engines": { "node": ">=18.0.0" @@ -2329,6 +2330,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2337,6 +2339,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -2356,6 +2359,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2370,6 +2374,7 @@ "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "license": "BSD-3-Clause", "dependencies": { "whatwg-url": "^7.0.0" }, @@ -2381,6 +2386,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", "dependencies": { "punycode": "^2.1.0" } @@ -2388,12 +2394,14 @@ "node_modules/@serwist/build/node_modules/webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" }, "node_modules/@serwist/build/node_modules/whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -2401,17 +2409,18 @@ } }, "node_modules/@serwist/next": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@serwist/next/-/next-9.0.11.tgz", - "integrity": "sha512-Aa26qgJxnaxbGK8JYAWqAPeDcyfu0xjYUPpvSfc3d9GrIl9G9cdflkcsvcbmJGnOb3Oc4tHN4wncYO6cIKb2wQ==", - "dependencies": { - "@serwist/build": "9.0.11", - "@serwist/webpack-plugin": "9.0.11", - "@serwist/window": "9.0.11", - "chalk": "5.3.0", + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@serwist/next/-/next-9.0.13.tgz", + "integrity": "sha512-nI2N4oSEHJGH0YUsE4m1obPfudO3DZ/pXiHPaisw+28YjgkMqD6ePfhzeHGO07ahPmIUiyHca9VNO8OfarbQ1Q==", + "license": "MIT", + "dependencies": { + "@serwist/build": "9.0.13", + "@serwist/webpack-plugin": "9.0.13", + "@serwist/window": "9.0.13", + "chalk": "5.4.1", "glob": "10.4.5", - "serwist": "9.0.11", - "zod": "3.23.8" + "serwist": "9.0.13", + "zod": "3.24.2" }, "engines": { "node": ">=18.0.0" @@ -2435,9 +2444,10 @@ } }, "node_modules/@serwist/next/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2479,13 +2489,14 @@ } }, "node_modules/@serwist/webpack-plugin": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@serwist/webpack-plugin/-/webpack-plugin-9.0.11.tgz", - "integrity": "sha512-ZTxVJqv7nKlPWmhC3oMt7tZc0ssnd7SYr6L8zZLLF7ltJUub9TMyh1K1zL5TJtsr8DyfALNFPwPA/s2yjYSk+w==", + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@serwist/webpack-plugin/-/webpack-plugin-9.0.13.tgz", + "integrity": "sha512-Z+Eve8dckM2FulRCa7Cj7VCF3EOP7QkRA76tI742olF7J2sYZSm3t9Ex13jDxTMmYiU1AxLq6V6gEMIdRAetVw==", + "license": "MIT", "dependencies": { - "@serwist/build": "9.0.11", + "@serwist/build": "9.0.13", "pretty-bytes": "6.1.1", - "zod": "3.23.8" + "zod": "3.24.2" }, "engines": { "node": ">=18.0.0" @@ -2504,12 +2515,13 @@ } }, "node_modules/@serwist/window": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@serwist/window/-/window-9.0.11.tgz", - "integrity": "sha512-hUJVNxZbqfnJbUTfuJew7SR3f1KBIv/4nwmP1YRxjR6EMthUfN4bVSLzWLW8/u3h5bNaVh7sOhopUVC8m1HTCQ==", + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@serwist/window/-/window-9.0.13.tgz", + "integrity": "sha512-Cf3RizPuFInDcLt0P1Y5QzG1sA5mW131/PZfMYE3yBuNUSGNgOQGlYuLdwDOWPHgECYoVb/da8pspdQNKs0O5g==", + "license": "MIT", "dependencies": { "@types/trusted-types": "2.0.7", - "serwist": "9.0.11" + "serwist": "9.0.13" }, "peerDependencies": { "typescript": ">=5.0.0" @@ -3028,7 +3040,8 @@ "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==" + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" }, "node_modules/@types/warning": { "version": "3.0.3", @@ -4085,6 +4098,7 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -6312,9 +6326,10 @@ } }, "node_modules/idb": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.0.tgz", - "integrity": "sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==" + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.2.tgz", + "integrity": "sha512-CX70rYhx7GDDQzwwQMDwF6kDRQi5vVs6khHUumDrMecBylKkwvZ8HWvKV08AGb7VbpoGCWUQ4aHzNDgoUiOIUg==", + "license": "ISC" }, "node_modules/idb-wrapper": { "version": "1.7.2", @@ -8164,7 +8179,8 @@ "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", @@ -9378,6 +9394,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -10146,11 +10163,12 @@ } }, "node_modules/serwist": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/serwist/-/serwist-9.0.11.tgz", - "integrity": "sha512-oUuyOuIFZoj+ZYdwWnPYVsndOw5CoGsTy106mHJ2wxjnz01TrDhg2l26yrsoJek1qT/Doi0pzknYLLXTIFs5og==", + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/serwist/-/serwist-9.0.13.tgz", + "integrity": "sha512-BF3bmzYdOVT2lF3iHV0044NqTO6q6GAiqrYpc7L9EPYQXZHOy22WajKaHLvCdvpm2Jpji4SsxUL8/uC1WSCZ5g==", + "license": "MIT", "dependencies": { - "idb": "8.0.0" + "idb": "8.0.2" }, "peerDependencies": { "typescript": ">=5.0.0" @@ -11753,9 +11771,10 @@ } }, "node_modules/zod": { - "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "version": "3.24.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", + "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index f4c555ba..6c719f7f 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@next-auth/mongodb-adapter": "^1.1.3", - "@serwist/next": "^9.0.11", + "@serwist/next": "^9.0.13", "@types/http-proxy": "^1.17.15", "@types/react-dom": "18.3.1", "@types/socket.io-client": "^3.0.0", From 6bbd1f8852d6c4ab6184f28e6a1d55d7b4db8aee Mon Sep 17 00:00:00 2001 From: Gearbox Bot Date: Mon, 7 Apr 2025 18:56:57 +0000 Subject: [PATCH 93/93] 1.3.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b1333439..cb8782f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "license": "CC BY-NC-SA 4.0", "dependencies": { "dependencies": "^0.0.1", diff --git a/package.json b/package.json index 6c719f7f..543a8d56 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sj3", - "version": "1.3.1", + "version": "1.3.2", "private": true, "repository": "https://github.com/Decatur-Robotics/Gearbox", "license": "CC BY-NC-SA 4.0",