From 81eecabe4c6379a54422fd59c38dd411bef390c8 Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:08:58 -0400 Subject: [PATCH 01/10] Update index.js --- routes/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/index.js b/routes/index.js index bd29338e5..03babbca4 100644 --- a/routes/index.js +++ b/routes/index.js @@ -29,7 +29,7 @@ router.use('/db', dbRouter); router.use('/play', playRouter); router.use('/user', userRouter); -router.use('/quizbowl', express.static('quizbowl')); +router.use('/shared', express.static('shared')); router.use(ssiMiddleware); router.use(express.static('client', { extensions: ['html'] })); From 0326553fa95150117fa0f46edc7500694050aae0 Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:10:20 -0400 Subject: [PATCH 02/10] move get-random-name --- client/play/mp/index.js | 2 +- client/play/mp/room.jsx | 2 +- routes/api/random-name.js | 2 +- server/multiplayer/handle-wss-connection.js | 2 +- {quizbowl => shared}/get-random-name.js | 0 5 files changed, 4 insertions(+), 4 deletions(-) rename {quizbowl => shared}/get-random-name.js (100%) diff --git a/client/play/mp/index.js b/client/play/mp/index.js index b9c8a176c..100c5edf5 100644 --- a/client/play/mp/index.js +++ b/client/play/mp/index.js @@ -1,4 +1,4 @@ -import getRandomName from '../../../quizbowl/get-random-name.js'; +import getRandomName from '../../../shared/get-random-name.js'; const ROOM_NAME_MAX_LENGTH = 32; diff --git a/client/play/mp/room.jsx b/client/play/mp/room.jsx index 0eb8ac57d..a18e076da 100644 --- a/client/play/mp/room.jsx +++ b/client/play/mp/room.jsx @@ -6,7 +6,7 @@ import { getDropdownValues } from '../../scripts/utilities/dropdown-checklist.js import CategoryModal from '../../scripts/components/CategoryModal.jsx'; import DifficultyDropdown from '../../scripts/components/DifficultyDropdown.jsx'; import { MODE_ENUM } from '../../../shared/constants.js'; -import getRandomName from '../../../quizbowl/get-random-name.js'; +import getRandomName from '../../../shared/get-random-name.js'; const room = { bonus: {}, diff --git a/routes/api/random-name.js b/routes/api/random-name.js index 700d57052..d1e77a8ad 100644 --- a/routes/api/random-name.js +++ b/routes/api/random-name.js @@ -1,4 +1,4 @@ -import getRandomName from '../../quizbowl/get-random-name.js'; +import getRandomName from '../../shared/get-random-name.js'; import { Router } from 'express'; diff --git a/server/multiplayer/handle-wss-connection.js b/server/multiplayer/handle-wss-connection.js index b2b59e82e..060869d2d 100644 --- a/server/multiplayer/handle-wss-connection.js +++ b/server/multiplayer/handle-wss-connection.js @@ -3,7 +3,7 @@ import ServerTossupBonusRoom from './ServerTossupBonusRoom.js'; import { configurePermanentRoomSettings } from './configure-permanent-room.js'; import { checkToken } from '../authentication.js'; import CategoryManager from '../../quizbowl/category-manager.js'; -import getRandomName from '../../quizbowl/get-random-name.js'; +import getRandomName from '../../shared/get-random-name.js'; import hasValidCharacters from '../moderation/has-valid-characters.js'; import { clientIp, isBannedIp } from '../moderation/ip-filter.js'; import isAppropriateString from '../moderation/is-appropriate-string.js'; diff --git a/quizbowl/get-random-name.js b/shared/get-random-name.js similarity index 100% rename from quizbowl/get-random-name.js rename to shared/get-random-name.js From 677bd208f9412b95eb5b9a79929105456a72a56f Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:10:57 -0400 Subject: [PATCH 03/10] move categories.js --- client/admin/category-reports/index.jsx | 2 +- client/scripts/utilities/filter-params.js | 2 +- database/qbreader/admin/update-subcategory.js | 2 +- database/qbreader/get-random-bonuses.js | 2 +- database/qbreader/get-random-tossups.js | 2 +- database/qbreader/get-set.js | 2 +- quizbowl/QuestionRoom.js | 2 +- quizbowl/category-manager.js | 2 +- routes/validators/category-bundle.js | 2 +- routes/validators/enum.js | 2 +- server/multiplayer/constants.js | 2 +- {quizbowl => shared}/categories.js | 0 tools/validate/category.js | 2 +- tools/validate/subcategory.js | 2 +- 14 files changed, 13 insertions(+), 13 deletions(-) rename {quizbowl => shared}/categories.js (100%) diff --git a/client/admin/category-reports/index.jsx b/client/admin/category-reports/index.jsx index f291dbb01..d1a7ae6bb 100644 --- a/client/admin/category-reports/index.jsx +++ b/client/admin/category-reports/index.jsx @@ -1,6 +1,6 @@ import getBonusPartLabel from '../../scripts/utilities/get-bonus-part-label.js'; import QuestionCard from '../../scripts/components/QuestionCard.jsx'; -import { CATEGORY_TO_ALTERNATE_SUBCATEGORIES, SUBCATEGORY_TO_CATEGORY } from '../../../quizbowl/categories.js'; +import { CATEGORY_TO_ALTERNATE_SUBCATEGORIES, SUBCATEGORY_TO_CATEGORY } from '../../../shared/categories.js'; const fontSize = window.localStorage.getItem('database-font-size') === 'true' ? (window.localStorage.getItem('font-size') ?? 16) : 16; diff --git a/client/scripts/utilities/filter-params.js b/client/scripts/utilities/filter-params.js index 88950462f..19c8f8cd5 100644 --- a/client/scripts/utilities/filter-params.js +++ b/client/scripts/utilities/filter-params.js @@ -1,5 +1,5 @@ import { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR, DIFFICULTIES } from '../../../shared/constants.js'; -import { CATEGORY_TO_SUBCATEGORY, CATEGORY_TO_ALTERNATE_SUBCATEGORIES } from '../../../quizbowl/categories.js'; +import { CATEGORY_TO_SUBCATEGORY, CATEGORY_TO_ALTERNATE_SUBCATEGORIES } from '../../../shared/categories.js'; function removeRedundantCategories (params) { let { categories, subcategories, alternateSubcategories } = params; diff --git a/database/qbreader/admin/update-subcategory.js b/database/qbreader/admin/update-subcategory.js index 7189712cd..d636a95ec 100644 --- a/database/qbreader/admin/update-subcategory.js +++ b/database/qbreader/admin/update-subcategory.js @@ -1,6 +1,6 @@ import { tossups, perTossupData, bonuses, perBonusData } from '../collections.js'; -import { SUBCATEGORY_TO_CATEGORY } from '../../../quizbowl/categories.js'; +import { SUBCATEGORY_TO_CATEGORY } from '../../../shared/categories.js'; /** * diff --git a/database/qbreader/get-random-bonuses.js b/database/qbreader/get-random-bonuses.js index 177d14a73..84fba59c0 100644 --- a/database/qbreader/get-random-bonuses.js +++ b/database/qbreader/get-random-bonuses.js @@ -1,6 +1,6 @@ import { bonuses } from './collections.js'; -import { CATEGORIES, SUBCATEGORIES } from '../../quizbowl/categories.js'; +import { CATEGORIES, SUBCATEGORIES } from '../../shared/categories.js'; import { DIFFICULTIES, DEFAULT_MIN_YEAR, DEFAULT_MAX_YEAR } from '../../shared/constants.js'; // eslint-disable-next-line no-unused-vars diff --git a/database/qbreader/get-random-tossups.js b/database/qbreader/get-random-tossups.js index 13523e3ce..92151f101 100644 --- a/database/qbreader/get-random-tossups.js +++ b/database/qbreader/get-random-tossups.js @@ -1,6 +1,6 @@ import { tossups } from './collections.js'; -import { CATEGORIES, SUBCATEGORIES } from '../../quizbowl/categories.js'; +import { CATEGORIES, SUBCATEGORIES } from '../../shared/categories.js'; import { DIFFICULTIES, DEFAULT_MIN_YEAR, DEFAULT_MAX_YEAR } from '../../shared/constants.js'; // eslint-disable-next-line no-unused-vars diff --git a/database/qbreader/get-set.js b/database/qbreader/get-set.js index 43f99ccb8..a3b1caa8c 100644 --- a/database/qbreader/get-set.js +++ b/database/qbreader/get-set.js @@ -1,6 +1,6 @@ import { tossups, bonuses } from './collections.js'; -import { CATEGORIES, SUBCATEGORIES } from '../../quizbowl/categories.js'; +import { CATEGORIES, SUBCATEGORIES } from '../../shared/categories.js'; // eslint-disable-next-line no-unused-vars import * as types from '../../types.js'; diff --git a/quizbowl/QuestionRoom.js b/quizbowl/QuestionRoom.js index 43f41d4ab..db829a333 100644 --- a/quizbowl/QuestionRoom.js +++ b/quizbowl/QuestionRoom.js @@ -1,4 +1,4 @@ -import { CATEGORIES, SUBCATEGORIES, ALTERNATE_SUBCATEGORIES, SUBCATEGORY_TO_CATEGORY, ALTERNATE_SUBCATEGORY_TO_CATEGORY } from './categories.js'; +import { CATEGORIES, SUBCATEGORIES, ALTERNATE_SUBCATEGORIES, SUBCATEGORY_TO_CATEGORY, ALTERNATE_SUBCATEGORY_TO_CATEGORY } from '../shared/categories.js'; import { DEFAULT_MIN_YEAR, DEFAULT_MAX_YEAR, MODE_ENUM } from '../shared/constants.js'; import CategoryManager from './category-manager.js'; // eslint-disable-line no-unused-vars import Room from './Room.js'; diff --git a/quizbowl/category-manager.js b/quizbowl/category-manager.js index 25a4a95b3..f5b49b6aa 100644 --- a/quizbowl/category-manager.js +++ b/quizbowl/category-manager.js @@ -1,4 +1,4 @@ -import { CATEGORIES, CATEGORY_TO_SUBCATEGORY, CATEGORY_TO_ALTERNATE_SUBCATEGORIES } from './categories.js'; +import { CATEGORIES, CATEGORY_TO_SUBCATEGORY, CATEGORY_TO_ALTERNATE_SUBCATEGORIES } from '../shared/categories.js'; export default class CategoryManager { /** diff --git a/routes/validators/category-bundle.js b/routes/validators/category-bundle.js index 4fa33e496..af9bd2ad4 100644 --- a/routes/validators/category-bundle.js +++ b/routes/validators/category-bundle.js @@ -7,7 +7,7 @@ import { SUBCATEGORIES, SUBCATEGORY_TO_CATEGORY, CATEGORY_TO_ALTERNATE_SUBCATEGORIES -} from '../../quizbowl/categories.js'; +} from '../../shared/categories.js'; // eslint-disable-next-line no-unused-vars import express from 'express'; diff --git a/routes/validators/enum.js b/routes/validators/enum.js index 847b4b256..139cba9e3 100644 --- a/routes/validators/enum.js +++ b/routes/validators/enum.js @@ -1,4 +1,4 @@ -import { ALTERNATE_SUBCATEGORIES, CATEGORIES, SUBCATEGORIES } from '../../quizbowl/categories.js'; +import { ALTERNATE_SUBCATEGORIES, CATEGORIES, SUBCATEGORIES } from '../../shared/categories.js'; /** * Validates that a field's value is one of the allowed enum values. diff --git a/server/multiplayer/constants.js b/server/multiplayer/constants.js index 957a82628..daadb315d 100644 --- a/server/multiplayer/constants.js +++ b/server/multiplayer/constants.js @@ -1,4 +1,4 @@ -import { CATEGORIES, CATEGORY_TO_SUBCATEGORY, SUBCATEGORIES } from '../../quizbowl/categories.js'; +import { CATEGORIES, CATEGORY_TO_SUBCATEGORY, SUBCATEGORIES } from '../../shared/categories.js'; export const ROOM_NAME_MAX_LENGTH = 32; export const USERNAME_MAX_LENGTH = 32; diff --git a/quizbowl/categories.js b/shared/categories.js similarity index 100% rename from quizbowl/categories.js rename to shared/categories.js diff --git a/tools/validate/category.js b/tools/validate/category.js index d2ef2ff53..f55a15d5c 100644 --- a/tools/validate/category.js +++ b/tools/validate/category.js @@ -1,5 +1,5 @@ import { bonuses, tossups } from '../../database/qbreader/collections.js'; -import { CATEGORIES } from '../../quizbowl/categories.js'; +import { CATEGORIES } from '../../shared/categories.js'; export default async function categoryValidation () { let total = 0; diff --git a/tools/validate/subcategory.js b/tools/validate/subcategory.js index 22d30e986..8c783131a 100644 --- a/tools/validate/subcategory.js +++ b/tools/validate/subcategory.js @@ -1,5 +1,5 @@ import { bonuses, tossups } from '../../database/qbreader/collections.js'; -import { SUBCATEGORIES } from '../../quizbowl/categories.js'; +import { SUBCATEGORIES } from '../../shared/categories.js'; export default async function subcategoryValidation () { let total = 0; From 4dd5b72358efb63828aa7b29205835b72ab4617f Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:11:24 -0400 Subject: [PATCH 04/10] move category-manager.js --- client/db/index.jsx | 2 +- client/play/bonuses/index.jsx | 2 +- client/play/mp/room.jsx | 2 +- client/play/tossups/index.jsx | 2 +- quizbowl/QuestionRoom.js | 2 +- server/multiplayer/handle-wss-connection.js | 2 +- {quizbowl => shared}/category-manager.js | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) rename {quizbowl => shared}/category-manager.js (99%) diff --git a/client/db/index.jsx b/client/db/index.jsx index 4738de845..bb3f99d05 100644 --- a/client/db/index.jsx +++ b/client/db/index.jsx @@ -8,7 +8,7 @@ import DifficultyDropdown from '../scripts/components/DifficultyDropdown.jsx'; import Star from '../scripts/components/Star.jsx'; import { getDropdownValues, setDropdownValues } from '../scripts/utilities/dropdown-checklist.js'; import filterParams from '../scripts/utilities/filter-params.js'; -import CategoryManager from '../../quizbowl/category-manager.js'; +import CategoryManager from '../../shared/category-manager.js'; import reportQuestion from '../scripts/api/report-question.js'; import getSetList from '../scripts/api/get-set-list.js'; diff --git a/client/play/bonuses/index.jsx b/client/play/bonuses/index.jsx index 76e217bdb..b68ec8d46 100644 --- a/client/play/bonuses/index.jsx +++ b/client/play/bonuses/index.jsx @@ -1,7 +1,7 @@ import { getDropdownValues } from '../../scripts/utilities/dropdown-checklist.js'; import CategoryModal from '../../scripts/components/CategoryModal.jsx'; import DifficultyDropdown from '../../scripts/components/DifficultyDropdown.jsx'; -import CategoryManager from '../../../quizbowl/category-manager.js'; +import CategoryManager from '../../../shared/category-manager.js'; import Player from '../../../quizbowl/Player.js'; import Team from '../../../quizbowl/Team.js'; import SoloBonusRoom from './SoloBonusRoom.js'; diff --git a/client/play/mp/room.jsx b/client/play/mp/room.jsx index a18e076da..a16c1f810 100644 --- a/client/play/mp/room.jsx +++ b/client/play/mp/room.jsx @@ -1,7 +1,7 @@ import MultiplayerTossupBonusClient from './MultiplayerTossupBonusClient.js'; import { showAlert } from './alert.js'; -import CategoryManager from '../../../quizbowl/category-manager.js'; +import CategoryManager from '../../../shared/category-manager.js'; import { getDropdownValues } from '../../scripts/utilities/dropdown-checklist.js'; import CategoryModal from '../../scripts/components/CategoryModal.jsx'; import DifficultyDropdown from '../../scripts/components/DifficultyDropdown.jsx'; diff --git a/client/play/tossups/index.jsx b/client/play/tossups/index.jsx index e8778049a..cbd99ac65 100644 --- a/client/play/tossups/index.jsx +++ b/client/play/tossups/index.jsx @@ -1,4 +1,4 @@ -import CategoryManager from '../../../quizbowl/category-manager.js'; +import CategoryManager from '../../../shared/category-manager.js'; import Player from '../../../quizbowl/Player.js'; import { getDropdownValues } from '../../scripts/utilities/dropdown-checklist.js'; import CategoryModal from '../../scripts/components/CategoryModal.jsx'; diff --git a/quizbowl/QuestionRoom.js b/quizbowl/QuestionRoom.js index db829a333..6d28320fe 100644 --- a/quizbowl/QuestionRoom.js +++ b/quizbowl/QuestionRoom.js @@ -1,6 +1,6 @@ import { CATEGORIES, SUBCATEGORIES, ALTERNATE_SUBCATEGORIES, SUBCATEGORY_TO_CATEGORY, ALTERNATE_SUBCATEGORY_TO_CATEGORY } from '../shared/categories.js'; import { DEFAULT_MIN_YEAR, DEFAULT_MAX_YEAR, MODE_ENUM } from '../shared/constants.js'; -import CategoryManager from './category-manager.js'; // eslint-disable-line no-unused-vars +import CategoryManager from '../shared/category-manager.js'; // eslint-disable-line no-unused-vars import Room from './Room.js'; export default class QuestionRoom extends Room { diff --git a/server/multiplayer/handle-wss-connection.js b/server/multiplayer/handle-wss-connection.js index 060869d2d..2d7526e5a 100644 --- a/server/multiplayer/handle-wss-connection.js +++ b/server/multiplayer/handle-wss-connection.js @@ -2,7 +2,7 @@ import { MAX_ONLINE_PLAYERS, MAX_CONNECTIONS_PER_IP, PERMANENT_ROOMS, VERIFIED_R import ServerTossupBonusRoom from './ServerTossupBonusRoom.js'; import { configurePermanentRoomSettings } from './configure-permanent-room.js'; import { checkToken } from '../authentication.js'; -import CategoryManager from '../../quizbowl/category-manager.js'; +import CategoryManager from '../../shared/category-manager.js'; import getRandomName from '../../shared/get-random-name.js'; import hasValidCharacters from '../moderation/has-valid-characters.js'; import { clientIp, isBannedIp } from '../moderation/ip-filter.js'; diff --git a/quizbowl/category-manager.js b/shared/category-manager.js similarity index 99% rename from quizbowl/category-manager.js rename to shared/category-manager.js index f5b49b6aa..25a4a95b3 100644 --- a/quizbowl/category-manager.js +++ b/shared/category-manager.js @@ -1,4 +1,4 @@ -import { CATEGORIES, CATEGORY_TO_SUBCATEGORY, CATEGORY_TO_ALTERNATE_SUBCATEGORIES } from '../shared/categories.js'; +import { CATEGORIES, CATEGORY_TO_SUBCATEGORY, CATEGORY_TO_ALTERNATE_SUBCATEGORIES } from './categories.js'; export default class CategoryManager { /** From 8f1e2873114fe2b8d6d5ee50e1db370ce7b8ef1b Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:12:06 -0400 Subject: [PATCH 05/10] move Room.js --- quizbowl/QuestionRoom.js | 2 +- {quizbowl => shared}/Room.js | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename {quizbowl => shared}/Room.js (100%) diff --git a/quizbowl/QuestionRoom.js b/quizbowl/QuestionRoom.js index 6d28320fe..3283e5c12 100644 --- a/quizbowl/QuestionRoom.js +++ b/quizbowl/QuestionRoom.js @@ -1,7 +1,7 @@ import { CATEGORIES, SUBCATEGORIES, ALTERNATE_SUBCATEGORIES, SUBCATEGORY_TO_CATEGORY, ALTERNATE_SUBCATEGORY_TO_CATEGORY } from '../shared/categories.js'; import { DEFAULT_MIN_YEAR, DEFAULT_MAX_YEAR, MODE_ENUM } from '../shared/constants.js'; import CategoryManager from '../shared/category-manager.js'; // eslint-disable-line no-unused-vars -import Room from './Room.js'; +import Room from '../shared/Room.js'; export default class QuestionRoom extends Room { /** diff --git a/quizbowl/Room.js b/shared/Room.js similarity index 100% rename from quizbowl/Room.js rename to shared/Room.js From 2c75a8992a57c7ebf8aecb1487c5b5012cedd0b0 Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:12:36 -0400 Subject: [PATCH 06/10] move Team.js --- client/play/bonuses/index.jsx | 2 +- server/multiplayer/ServerMultiplayerRoomMixin.js | 2 +- {quizbowl => shared}/Team.js | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename {quizbowl => shared}/Team.js (100%) diff --git a/client/play/bonuses/index.jsx b/client/play/bonuses/index.jsx index b68ec8d46..c1871db19 100644 --- a/client/play/bonuses/index.jsx +++ b/client/play/bonuses/index.jsx @@ -3,7 +3,7 @@ import CategoryModal from '../../scripts/components/CategoryModal.jsx'; import DifficultyDropdown from '../../scripts/components/DifficultyDropdown.jsx'; import CategoryManager from '../../../shared/category-manager.js'; import Player from '../../../quizbowl/Player.js'; -import Team from '../../../quizbowl/Team.js'; +import Team from '../../../shared/Team.js'; import SoloBonusRoom from './SoloBonusRoom.js'; import SoloBonusClient from './SoloBonusClient.js'; diff --git a/server/multiplayer/ServerMultiplayerRoomMixin.js b/server/multiplayer/ServerMultiplayerRoomMixin.js index dab1ec9ef..83fa7a9ef 100644 --- a/server/multiplayer/ServerMultiplayerRoomMixin.js +++ b/server/multiplayer/ServerMultiplayerRoomMixin.js @@ -14,7 +14,7 @@ import getSetList from '../../database/qbreader/get-set-list.js'; import getNumPackets from '../../database/qbreader/get-num-packets.js'; import checkAnswer from 'qb-answer-checker'; -import Team from '../../quizbowl/Team.js'; +import Team from '../../shared/Team.js'; const BAN_DURATION = 1000 * 60 * 30; // 30 minutes diff --git a/quizbowl/Team.js b/shared/Team.js similarity index 100% rename from quizbowl/Team.js rename to shared/Team.js From 17914047309fdd72bab8bbd4601e2a242107d061 Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:12:52 -0400 Subject: [PATCH 07/10] move Player.js --- client/play/bonuses/index.jsx | 2 +- client/play/tossups/ai-mode/AIBot.js | 2 +- client/play/tossups/index.jsx | 2 +- server/multiplayer/ServerPlayer.js | 2 +- {quizbowl => shared}/Player.js | 0 5 files changed, 4 insertions(+), 4 deletions(-) rename {quizbowl => shared}/Player.js (100%) diff --git a/client/play/bonuses/index.jsx b/client/play/bonuses/index.jsx index c1871db19..a88350dd0 100644 --- a/client/play/bonuses/index.jsx +++ b/client/play/bonuses/index.jsx @@ -2,7 +2,7 @@ import { getDropdownValues } from '../../scripts/utilities/dropdown-checklist.js import CategoryModal from '../../scripts/components/CategoryModal.jsx'; import DifficultyDropdown from '../../scripts/components/DifficultyDropdown.jsx'; import CategoryManager from '../../../shared/category-manager.js'; -import Player from '../../../quizbowl/Player.js'; +import Player from '../../../shared/Player.js'; import Team from '../../../shared/Team.js'; import SoloBonusRoom from './SoloBonusRoom.js'; import SoloBonusClient from './SoloBonusClient.js'; diff --git a/client/play/tossups/ai-mode/AIBot.js b/client/play/tossups/ai-mode/AIBot.js index aa5b9bdd3..6c9645383 100644 --- a/client/play/tossups/ai-mode/AIBot.js +++ b/client/play/tossups/ai-mode/AIBot.js @@ -1,4 +1,4 @@ -import Player from '../../../../quizbowl/Player.js'; +import Player from '../../../../shared/Player.js'; export default class AIBot { constructor (room, name = 'ai-bot') { diff --git a/client/play/tossups/index.jsx b/client/play/tossups/index.jsx index cbd99ac65..623742575 100644 --- a/client/play/tossups/index.jsx +++ b/client/play/tossups/index.jsx @@ -1,5 +1,5 @@ import CategoryManager from '../../../shared/category-manager.js'; -import Player from '../../../quizbowl/Player.js'; +import Player from '../../../shared/Player.js'; import { getDropdownValues } from '../../scripts/utilities/dropdown-checklist.js'; import CategoryModal from '../../scripts/components/CategoryModal.jsx'; import DifficultyDropdown from '../../scripts/components/DifficultyDropdown.jsx'; diff --git a/server/multiplayer/ServerPlayer.js b/server/multiplayer/ServerPlayer.js index 0e0590fb0..f8bd00695 100644 --- a/server/multiplayer/ServerPlayer.js +++ b/server/multiplayer/ServerPlayer.js @@ -1,4 +1,4 @@ -import Player from '../../quizbowl/Player.js'; +import Player from '../../shared/Player.js'; import { USERNAME_MAX_LENGTH } from './constants.js'; export default class ServerPlayer extends Player { diff --git a/quizbowl/Player.js b/shared/Player.js similarity index 100% rename from quizbowl/Player.js rename to shared/Player.js From ad72d704e0b888429fb2698927c8223805237a16 Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:13:25 -0400 Subject: [PATCH 08/10] move TossupRoom.js --- client/play/tossups/SoloTossupRoom.js | 2 +- quizbowl/TossupBonusRoom.js | 2 +- server/multiplayer/ServerMultiplayerRoomMixin.js | 2 +- server/multiplayer/ServerTossupRoom.js | 2 +- {quizbowl => shared}/TossupRoom.js | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) rename {quizbowl => shared}/TossupRoom.js (98%) diff --git a/client/play/tossups/SoloTossupRoom.js b/client/play/tossups/SoloTossupRoom.js index f16542ad4..90f3a6c61 100644 --- a/client/play/tossups/SoloTossupRoom.js +++ b/client/play/tossups/SoloTossupRoom.js @@ -1,5 +1,5 @@ import api from '../../scripts/api/index.js'; -import TossupRoom from '../../../quizbowl/TossupRoom.js'; +import TossupRoom from '../../../shared/TossupRoom.js'; let starredTossupIds = null; async function getStarredTossup () { diff --git a/quizbowl/TossupBonusRoom.js b/quizbowl/TossupBonusRoom.js index 2673b4a61..eabb7733d 100644 --- a/quizbowl/TossupBonusRoom.js +++ b/quizbowl/TossupBonusRoom.js @@ -1,6 +1,6 @@ import { BONUS_PROGRESS_ENUM, QUESTION_TYPE_ENUM, TOSSUP_PROGRESS_ENUM } from '../shared/constants.js'; import { BonusRoomMixin } from './BonusRoom.js'; -import { TossupRoomMixin } from './TossupRoom.js'; +import { TossupRoomMixin } from '../shared/TossupRoom.js'; import QuestionRoom from './QuestionRoom.js'; export default class TossupBonusRoom extends BonusRoomMixin(TossupRoomMixin(QuestionRoom)) { diff --git a/server/multiplayer/ServerMultiplayerRoomMixin.js b/server/multiplayer/ServerMultiplayerRoomMixin.js index 83fa7a9ef..8bc88316b 100644 --- a/server/multiplayer/ServerMultiplayerRoomMixin.js +++ b/server/multiplayer/ServerMultiplayerRoomMixin.js @@ -4,7 +4,7 @@ import { HEADER, ENDC, OKCYAN, OKBLUE } from '../bcolors.js'; import isAppropriateString from '../moderation/is-appropriate-string.js'; import { MODE_ENUM, QUESTION_TYPE_ENUM, TOSSUP_PROGRESS_ENUM } from '../../shared/constants.js'; import insertTokensIntoHTML from '../../shared/insert-tokens-into-html.js'; -// import TossupRoom from '../../quizbowl/TossupRoom.js'; +// import TossupRoom from '../../shared/TossupRoom.js'; import RateLimit from '../RateLimit.js'; import getRandomTossups from '../../database/qbreader/get-random-tossups.js'; diff --git a/server/multiplayer/ServerTossupRoom.js b/server/multiplayer/ServerTossupRoom.js index 541c8f043..58173db4b 100644 --- a/server/multiplayer/ServerTossupRoom.js +++ b/server/multiplayer/ServerTossupRoom.js @@ -1,5 +1,5 @@ import ServerMultiplayerRoomMixin from './ServerMultiplayerRoomMixin.js'; -import TossupRoom from '../../quizbowl/TossupRoom.js'; +import TossupRoom from '../../shared/TossupRoom.js'; import { TOSSUP_PROGRESS_ENUM } from '../../shared/constants.js'; export default class ServerTossupRoom extends ServerMultiplayerRoomMixin(TossupRoom) { diff --git a/quizbowl/TossupRoom.js b/shared/TossupRoom.js similarity index 98% rename from quizbowl/TossupRoom.js rename to shared/TossupRoom.js index 1878c3027..79f4ea705 100644 --- a/quizbowl/TossupRoom.js +++ b/shared/TossupRoom.js @@ -1,6 +1,6 @@ -import { ANSWER_TIME_LIMIT, DEAD_TIME_LIMIT, MODE_ENUM, TOSSUP_PROGRESS_ENUM } from '../shared/constants.js'; -import insertTokensIntoHTML from '../shared/insert-tokens-into-html.js'; -import QuestionRoom from './QuestionRoom.js'; +import { ANSWER_TIME_LIMIT, DEAD_TIME_LIMIT, MODE_ENUM, TOSSUP_PROGRESS_ENUM } from './constants.js'; +import insertTokensIntoHTML from './insert-tokens-into-html.js'; +import QuestionRoom from '../quizbowl/QuestionRoom.js'; export const TossupRoomMixin = (QuestionRoomClass) => class extends QuestionRoomClass { constructor (name, categoryManager, supportedQuestionTypes = ['tossup']) { From 4133aca1a6101e0ecd9cad74162329a4672f4883 Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:14:48 -0400 Subject: [PATCH 09/10] move BonusRoom.js --- client/play/bonuses/SoloBonusRoom.js | 2 +- server/multiplayer/ServerTossupBonusRoom.js | 2 +- {quizbowl => shared}/BonusRoom.js | 4 ++-- {quizbowl => shared}/TossupBonusRoom.js | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) rename {quizbowl => shared}/BonusRoom.js (99%) rename {quizbowl => shared}/TossupBonusRoom.js (96%) diff --git a/client/play/bonuses/SoloBonusRoom.js b/client/play/bonuses/SoloBonusRoom.js index ddaf3d5d9..bd2491ed5 100644 --- a/client/play/bonuses/SoloBonusRoom.js +++ b/client/play/bonuses/SoloBonusRoom.js @@ -1,4 +1,4 @@ -import BonusRoom from '../../../quizbowl/BonusRoom.js'; +import BonusRoom from '../../../shared/BonusRoom.js'; import api from '../../scripts/api/index.js'; async function getPacket ({ setName, packetNumber }) { diff --git a/server/multiplayer/ServerTossupBonusRoom.js b/server/multiplayer/ServerTossupBonusRoom.js index 3630e3a60..dd57c4a13 100644 --- a/server/multiplayer/ServerTossupBonusRoom.js +++ b/server/multiplayer/ServerTossupBonusRoom.js @@ -1,6 +1,6 @@ import { EARLY_CORRECT_CELERITY_THRESHOLD } from './constants.js'; import ServerMultiplayerRoomMixin from './ServerMultiplayerRoomMixin.js'; -import TossupBonusRoom from '../../quizbowl/TossupBonusRoom.js'; +import TossupBonusRoom from '../../shared/TossupBonusRoom.js'; import { QUESTION_TYPE_ENUM, TOSSUP_PROGRESS_ENUM } from '../../shared/constants.js'; export default class ServerTossupBonusRoom extends ServerMultiplayerRoomMixin(TossupBonusRoom) { diff --git a/quizbowl/BonusRoom.js b/shared/BonusRoom.js similarity index 99% rename from quizbowl/BonusRoom.js rename to shared/BonusRoom.js index efabc8443..62ef922f0 100644 --- a/quizbowl/BonusRoom.js +++ b/shared/BonusRoom.js @@ -1,5 +1,5 @@ -import { ANSWER_TIME_LIMIT, BONUS_PROGRESS_ENUM, MODE_ENUM } from '../shared/constants.js'; -import QuestionRoom from './QuestionRoom.js'; +import { ANSWER_TIME_LIMIT, BONUS_PROGRESS_ENUM, MODE_ENUM } from './constants.js'; +import QuestionRoom from '../quizbowl/QuestionRoom.js'; export const BonusRoomMixin = (QuestionRoomClass) => class extends QuestionRoomClass { constructor (name, categoryManager, supportedQuestionTypes = ['bonuses']) { diff --git a/quizbowl/TossupBonusRoom.js b/shared/TossupBonusRoom.js similarity index 96% rename from quizbowl/TossupBonusRoom.js rename to shared/TossupBonusRoom.js index eabb7733d..e3588cd2c 100644 --- a/quizbowl/TossupBonusRoom.js +++ b/shared/TossupBonusRoom.js @@ -1,7 +1,7 @@ -import { BONUS_PROGRESS_ENUM, QUESTION_TYPE_ENUM, TOSSUP_PROGRESS_ENUM } from '../shared/constants.js'; +import { BONUS_PROGRESS_ENUM, QUESTION_TYPE_ENUM, TOSSUP_PROGRESS_ENUM } from './constants.js'; import { BonusRoomMixin } from './BonusRoom.js'; -import { TossupRoomMixin } from '../shared/TossupRoom.js'; -import QuestionRoom from './QuestionRoom.js'; +import { TossupRoomMixin } from './TossupRoom.js'; +import QuestionRoom from '../quizbowl/QuestionRoom.js'; export default class TossupBonusRoom extends BonusRoomMixin(TossupRoomMixin(QuestionRoom)) { constructor (name, categoryManager, supportedQuestionTypes = ['tossups', 'bonuses']) { From c06145ce3271502e02241d0a3130f732a6d4784f Mon Sep 17 00:00:00 2001 From: Geoffrey Wu Date: Sun, 12 Jul 2026 17:15:07 -0400 Subject: [PATCH 10/10] move QuestionRoom.js --- shared/BonusRoom.js | 2 +- {quizbowl => shared}/QuestionRoom.js | 8 ++++---- shared/TossupBonusRoom.js | 2 +- shared/TossupRoom.js | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) rename {quizbowl => shared}/QuestionRoom.js (98%) diff --git a/shared/BonusRoom.js b/shared/BonusRoom.js index 62ef922f0..a339e5e7b 100644 --- a/shared/BonusRoom.js +++ b/shared/BonusRoom.js @@ -1,5 +1,5 @@ import { ANSWER_TIME_LIMIT, BONUS_PROGRESS_ENUM, MODE_ENUM } from './constants.js'; -import QuestionRoom from '../quizbowl/QuestionRoom.js'; +import QuestionRoom from './QuestionRoom.js'; export const BonusRoomMixin = (QuestionRoomClass) => class extends QuestionRoomClass { constructor (name, categoryManager, supportedQuestionTypes = ['bonuses']) { diff --git a/quizbowl/QuestionRoom.js b/shared/QuestionRoom.js similarity index 98% rename from quizbowl/QuestionRoom.js rename to shared/QuestionRoom.js index 3283e5c12..365667bb4 100644 --- a/quizbowl/QuestionRoom.js +++ b/shared/QuestionRoom.js @@ -1,7 +1,7 @@ -import { CATEGORIES, SUBCATEGORIES, ALTERNATE_SUBCATEGORIES, SUBCATEGORY_TO_CATEGORY, ALTERNATE_SUBCATEGORY_TO_CATEGORY } from '../shared/categories.js'; -import { DEFAULT_MIN_YEAR, DEFAULT_MAX_YEAR, MODE_ENUM } from '../shared/constants.js'; -import CategoryManager from '../shared/category-manager.js'; // eslint-disable-line no-unused-vars -import Room from '../shared/Room.js'; +import { CATEGORIES, SUBCATEGORIES, ALTERNATE_SUBCATEGORIES, SUBCATEGORY_TO_CATEGORY, ALTERNATE_SUBCATEGORY_TO_CATEGORY } from './categories.js'; +import { DEFAULT_MIN_YEAR, DEFAULT_MAX_YEAR, MODE_ENUM } from './constants.js'; +import CategoryManager from './category-manager.js'; // eslint-disable-line no-unused-vars +import Room from './Room.js'; export default class QuestionRoom extends Room { /** diff --git a/shared/TossupBonusRoom.js b/shared/TossupBonusRoom.js index e3588cd2c..666dd4894 100644 --- a/shared/TossupBonusRoom.js +++ b/shared/TossupBonusRoom.js @@ -1,7 +1,7 @@ import { BONUS_PROGRESS_ENUM, QUESTION_TYPE_ENUM, TOSSUP_PROGRESS_ENUM } from './constants.js'; import { BonusRoomMixin } from './BonusRoom.js'; import { TossupRoomMixin } from './TossupRoom.js'; -import QuestionRoom from '../quizbowl/QuestionRoom.js'; +import QuestionRoom from './QuestionRoom.js'; export default class TossupBonusRoom extends BonusRoomMixin(TossupRoomMixin(QuestionRoom)) { constructor (name, categoryManager, supportedQuestionTypes = ['tossups', 'bonuses']) { diff --git a/shared/TossupRoom.js b/shared/TossupRoom.js index 79f4ea705..cd477c0f7 100644 --- a/shared/TossupRoom.js +++ b/shared/TossupRoom.js @@ -1,6 +1,6 @@ import { ANSWER_TIME_LIMIT, DEAD_TIME_LIMIT, MODE_ENUM, TOSSUP_PROGRESS_ENUM } from './constants.js'; import insertTokensIntoHTML from './insert-tokens-into-html.js'; -import QuestionRoom from '../quizbowl/QuestionRoom.js'; +import QuestionRoom from './QuestionRoom.js'; export const TossupRoomMixin = (QuestionRoomClass) => class extends QuestionRoomClass { constructor (name, categoryManager, supportedQuestionTypes = ['tossup']) {