From 935e35784260104be42309935760f00053d9976e Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Sun, 16 Aug 2026 10:01:27 +0300 Subject: [PATCH] Extract @sendou/utils, @sendou/build-analyzer, @sendou/map-list-generator and @sendou/scanner-core workspace packages --- AGENTS.md | 3 +- .../app/components/AbilitiesSelector.tsx | 2 +- apps/web-react/app/components/Alert.tsx | 2 +- apps/web-react/app/components/Catcher.tsx | 2 +- .../app/components/FormWithConfirm.tsx | 2 +- .../app/components/MapPoolSelector.tsx | 4 +- .../web-react/app/components/WeaponSelect.tsx | 2 +- .../app/components/elements/Button.tsx | 2 +- .../components/match-page/MatchRosterTab.tsx | 2 +- .../app/components/match-page/MatchTabs.tsx | 2 +- .../components/match-page/MatchTimeline.tsx | 2 +- .../app/components/match-page/utils.ts | 2 +- .../app/db/seed/core/SplatoonFaker.ts | 2 +- apps/web-react/app/db/seed/dev/calendar.ts | 2 +- apps/web-react/app/db/seed/dev/sendouq.ts | 2 +- apps/web-react/app/db/seed/dev/tournaments.ts | 2 +- .../seed/factories/PlusSuggestionFactory.ts | 2 +- .../app/db/seed/factories/SQGroupFactory.ts | 2 +- .../app/db/seed/factories/SQMatchFactory.ts | 2 +- .../app/db/seed/factories/TeamFactory.ts | 2 +- .../db/seed/factories/TournamentFactory.ts | 2 +- .../TournamentOrganizationFactory.ts | 2 +- .../factories/TournamentStreamerFactory.ts | 2 +- .../seed/factories/TournamentTeamFactory.ts | 4 +- .../app/db/seed/factories/UserFactory.ts | 2 +- .../seed/factories/XRankPlacementFactory.ts | 2 +- apps/web-react/app/db/seed/index.ts | 2 +- apps/web-react/app/db/sql.ts | 4 +- apps/web-react/app/db/tables.ts | 4 +- apps/web-react/app/entry.client.tsx | 4 +- apps/web-react/app/entry.server.tsx | 2 +- .../features/admin/AdminRepository.server.ts | 2 +- .../features/admin/actions/admin.server.ts | 2 +- .../admin/actions/admin.streams.server.ts | 2 +- .../features/admin/core/plus-tier.server.ts | 2 +- .../api-public/routes/tournament-match.$id.ts | 4 +- .../api-public/routes/user.$identifier.ts | 2 +- .../app/features/art/ArtRepository.server.ts | 2 +- .../app/features/art/art-image.server.ts | 2 +- .../art/components/ArtImageFormField.tsx | 2 +- .../articles/loaders/a.$slug.server.ts | 2 +- .../app/features/articles/routes/a.$slug.tsx | 2 +- .../AssociationRepository.server.ts | 2 +- .../actions/associations.server.ts | 2 +- .../auth/core/DiscordStrategy.server.ts | 2 +- .../app/features/auth/core/routes.server.ts | 2 +- .../features/badges/BadgeRepository.server.ts | 2 +- .../badges/actions/badges.$id.edit.server.ts | 2 +- .../badges/components/BadgeDisplay.tsx | 2 +- .../features/ban/loaders/suspended.server.ts | 2 +- .../features/build-analyzer/analyzer-hooks.ts | 13 ++- .../build-analyzer/analyzer-search-params.ts | 11 +- .../components/PerInkTankGrid.tsx | 14 ++- .../build-analyzer/routes/analyzer.tsx | 64 ++++++----- .../features/build-stats/build-stats-utils.ts | 8 +- .../build-stats/routes/builds.$slug.stats.tsx | 2 +- .../builds/BuildRepository.server.test.ts | 2 +- .../features/builds/BuildRepository.server.ts | 12 +-- .../app/features/builds/builds-schemas.ts | 2 +- .../app/features/builds/core/filter.server.ts | 2 +- .../features/builds/routes/builds.$slug.tsx | 2 +- .../calendar/CalendarRepository.server.ts | 2 +- .../calendar/actions/calendar.new.server.ts | 2 +- .../features/calendar/calendar-new-schemas.ts | 2 +- .../calendar/calendar-progression-form.ts | 2 +- .../app/features/calendar/calendar-utils.ts | 4 +- .../features/calendar/core/CalendarEvent.ts | 2 +- .../app/features/calendar/core/ICal.server.ts | 2 +- .../routes/calendar.$id.report-winners.tsx | 2 +- .../features/calendar/routes/calendar.$id.tsx | 2 +- .../features/calendar/routes/calendar.new.tsx | 2 +- .../app/features/chat/ChatProvider.tsx | 2 +- .../features/chat/ChatSystemMessage.server.ts | 4 +- .../comp-analyzer/comp-analyzer-constants.ts | 2 +- .../comp-analyzer-search-params.ts | 2 +- .../comp-analyzer/comp-analyzer-types.ts | 2 +- .../components/DamageComboBar.tsx | 4 +- .../components/SelectedWeapons.tsx | 2 +- .../components/WeaponCategories.tsx | 2 +- .../comp-analyzer/components/WeaponGrid.tsx | 2 +- .../comp-analyzer/core/damage-combinations.ts | 10 +- .../core/special-weapon-range.ts | 2 +- .../comp-analyzer/core/weapon-range.ts | 2 +- .../front-page/core/Changelog.server.ts | 2 +- .../img-export/components/BuildGraphic.tsx | 8 +- .../img-export/components/Graphic.tsx | 2 +- .../app/features/img-export/core/RunComps.ts | 2 +- .../img-upload/actions/upload.admin.server.ts | 2 +- .../features/img-upload/image-bytes.server.ts | 2 +- .../features/img-upload/image-field.server.ts | 2 +- .../actions/leaderboards.server.ts | 4 +- .../leaderboards/components/TopTenPlayer.tsx | 2 +- .../leaderboards/core/leaderboards.server.ts | 2 +- .../app/features/lfg/core/filtering.ts | 2 +- .../features/lfg/loaders/lfg.new.server.ts | 2 +- .../app/features/lfg/loaders/lfg.server.ts | 2 +- .../web-react/app/features/lfg/routes/lfg.tsx | 2 +- .../map-list-generator-search-params.test.ts | 2 +- .../map-list-generator-search-params.ts | 2 +- .../map-list-generator-urls.ts | 2 +- .../map-list-generator/routes/maps.tsx | 6 +- .../map-planner/components/Planner.tsx | 2 +- .../routes/match-page-test.tsx | 2 +- .../app/features/match-profile/banned-maps.ts | 2 +- .../app/features/mmr/mmr-utils.server.ts | 2 +- apps/web-react/app/features/mmr/mmr-utils.ts | 2 +- .../notifications/core/notify.server.ts | 2 +- .../notifications/core/pushSubscription.ts | 2 +- .../notifications/core/resolve.server.ts | 2 +- .../notifications/core/webPush.server.ts | 2 +- .../notifications/notifications-utils.ts | 2 +- .../calculator-constants.ts | 6 +- .../calculator-hooks.ts | 12 +-- .../calculator-search-params.ts | 10 +- .../calculator-types.ts | 2 +- .../core/objectDamage.test.ts | 12 +-- .../core/objectDamage.ts | 20 ++-- .../core/objectHitPoints.ts | 32 +++--- .../routes/object-damage-calculator.tsx | 6 +- .../params/loaders/params.$slug.server.ts | 2 +- .../PlusSuggestionRepository.server.ts | 2 +- .../actions/plus.suggestions.server.ts | 4 +- .../PlusVotingRepository.server.ts | 4 +- .../plus-voting/actions/plus.voting.server.ts | 2 +- .../plus-voting/core/usePlusVoting.ts | 4 +- .../loaders/plus.voting.results.server.ts | 4 +- .../plus-voting/plus-voting-schemas.ts | 2 +- .../plus-voting/routes/plus.voting.tsx | 2 +- .../ScannerIngestRepository.server.test.ts | 2 +- .../ScannerIngestRepository.server.ts | 2 +- .../actions/scanner-ingest.server.ts | 4 +- .../scanner-ingest/core/Matches.test.ts | 2 +- .../features/scanner-ingest/core/Matches.ts | 2 +- .../scanner-ingest/core/Scoreboards.test.ts | 6 +- .../scanner-ingest/core/Scoreboards.ts | 4 +- .../scanner-ingest/core/tests/fixtures.ts | 2 +- .../features/scanner-ingest/tests/harness.ts | 4 +- apps/web-react/app/features/scanner/README.md | 12 ++- .../features/scanner/components/DeathCard.tsx | 8 +- .../features/scanner/components/EventCard.tsx | 22 ++-- .../scanner/components/EventTypeIcon.tsx | 16 +-- .../scanner/components/EventsSummary.tsx | 16 +-- .../features/scanner/components/LivePage.tsx | 41 +++---- .../scanner/components/MapStartCard.tsx | 2 +- .../features/scanner/components/MatchCard.tsx | 4 +- .../scanner/components/MatchLobbyTabs.tsx | 8 +- .../scanner/components/MinimapCard.tsx | 14 +-- .../scanner/components/ObjectiveCard.tsx | 2 +- .../scanner/components/PlayerStatusCard.tsx | 2 +- .../scanner/components/ScoreboardCard.tsx | 12 +-- .../scanner/components/ScoreboardOwnCard.tsx | 6 +- .../scanner/components/ScreenshotPage.tsx | 46 ++++---- .../scanner/components/StripWeaponsCard.tsx | 2 +- .../features/scanner/components/VodPage.tsx | 31 +++--- .../scanner/components/dedupe-events.ts | 4 +- .../features/scanner/components/events-csv.ts | 20 ++-- .../scanner/components/fixture-export.ts | 18 ++-- .../app/features/scanner/components/labels.ts | 6 +- .../scanner/components/player-status-view.ts | 3 +- .../scanner/components/sendou-ingest.ts | 11 +- .../scanner/components/sendou-upload.ts | 6 +- .../app/features/scanner/node/fixtures.ts | 8 +- .../app/features/scanner/node/image-io.ts | 2 +- .../app/features/scanner/node/resources.ts | 12 ++- .../app/features/scanner/scanner-schemas.ts | 6 +- .../app/features/scanner/store/events.ts | 3 +- .../scanner/tests/ability-harvest.test.ts | 8 +- .../app/features/scanner/tests/banner.test.ts | 2 +- .../scanner/tests/logic/dedupe-events.test.ts | 10 +- .../scanner/tests/logic/match-builder.test.ts | 24 ++--- .../scanner/tests/logic/match-sets.test.ts | 4 +- .../scanner/tests/logic/scheduler.test.ts | 2 +- .../features/scanner/tests/map-start.test.ts | 10 +- .../features/scanner/tests/minimap.test.ts | 18 ++-- .../features/scanner/tests/objective.test.ts | 23 ++-- .../scanner/tests/opencv-smoke.test.ts | 2 +- .../scanner/tests/player-status.test.ts | 23 ++-- .../scanner/tests/replay-time.test.ts | 2 +- .../tests/scoreboard-battle-log.test.ts | 6 +- .../scanner/tests/scoreboard-own.test.ts | 14 +-- .../features/scanner/tests/scoreboard.test.ts | 4 +- .../scanner/tests/sendou-upload.test.ts | 6 +- .../scanner/tests/strip-weapons.test.ts | 10 +- .../features/scanner/tests/suites/death.ts | 8 +- .../suites/scoreboard-battle-log-replay.ts | 6 +- .../features/scanner/tests/timeline.test.ts | 6 +- .../scanner/worker/analyzer.worker.ts | 29 ++--- .../app/features/scanner/worker/client.ts | 3 +- .../app/features/scanner/worker/protocol.ts | 7 +- .../app/features/scanner/worker/resources.ts | 14 ++- .../scrims/ScrimMapListRepository.server.ts | 2 +- .../scrims/ScrimPostRepository.server.ts | 4 +- .../scrims/actions/scrims.$id.server.ts | 2 +- .../scrims/actions/scrims.new.server.ts | 4 +- .../features/scrims/actions/scrims.server.ts | 4 +- .../scrims/components/ScrimMatchStatsTab.tsx | 2 +- .../app/features/scrims/core/Scrim.ts | 2 +- .../scrims/core/ScrimMapByMap.test.ts | 2 +- .../app/features/scrims/core/ScrimMapByMap.ts | 6 +- .../app/features/scrims/scrims-utils.test.ts | 2 +- .../app/features/scrims/scrims-utils.ts | 2 +- .../ReportedWeaponRepository.server.ts | 2 +- .../sendouq-match/SQMatchRepository.server.ts | 8 +- .../actions/q.match.$id.server.ts | 4 +- .../components/SendouQMatchBanner.tsx | 2 +- .../core/discord-webhook.server.ts | 2 +- .../sendouq-match/core/match.server.ts | 16 +-- .../sendouq-match/core/skills.server.ts | 2 +- .../QStreamsRepository.server.ts | 2 +- .../sendouq-streams/core/streams.server.ts | 2 +- .../sendouq/actions/q.looking.server.ts | 2 +- .../sendouq/actions/q.preparing.server.ts | 2 +- .../sendouq/actions/q.ready.server.ts | 2 +- .../app/features/sendouq/actions/q.server.ts | 2 +- .../sendouq/core/default-maps.server.ts | 4 +- .../features/sendouq/core/groups.server.ts | 2 +- .../sendouq/core/ready-check.server.test.ts | 2 +- .../features/sendouq/routes/q.looking.test.ts | 2 +- .../features/sendouq/routes/q.ready.test.ts | 2 +- .../settings/actions/settings.server.ts | 2 +- .../settings/components/PreferencesTab.tsx | 2 +- .../features/team/TeamRepository.server.ts | 2 +- .../actions/t.$customUrl.edit.server.test.ts | 2 +- .../team/actions/t.$customUrl.edit.server.ts | 2 +- .../team/actions/t.$customUrl.index.server.ts | 2 +- .../actions/t.$customUrl.roster.server.ts | 2 +- .../team/components/TeamGoBackButton.tsx | 2 +- .../team/routes/t.$customUrl.index.tsx | 2 +- .../tier-list-maker/hooks/useTierList.ts | 2 +- .../tier-list-maker-schemas.ts | 2 +- .../app/features/timezone/timezone-cookie.ts | 2 +- .../actions/xsearch.player.$id.server.ts | 2 +- .../actions/to.$id.admin.brackets.server.ts | 2 +- .../actions/to.$id.admin.index.server.ts | 6 +- .../to.$id.admin.registration.server.ts | 6 +- .../actions/to.$id.admin.seeds.server.ts | 2 +- .../routes/to.$id.admin.brackets.tsx | 2 +- .../routes/to.$id.admin.seeds.tsx | 2 +- ...ament-admin-registration-schemas.server.ts | 2 +- .../to.$id.brackets.finalize.server.ts | 4 +- .../actions/to.$id.brackets.server.ts | 6 +- .../components/Bracket/Match.tsx | 2 +- .../components/Bracket/PlacementsTable.tsx | 4 +- .../components/Bracket/RoundHeader.tsx | 2 +- .../components/BracketMapListDialog.tsx | 6 +- .../components/TournamentTeamActions.tsx | 2 +- .../core/AbDivisions.test.ts | 2 +- .../tournament-bracket/core/AbDivisions.ts | 2 +- .../tournament-bracket/core/Bracket.test.ts | 2 +- .../core/Bracket/Bracket.ts | 4 +- .../core/Bracket/DoubleEliminationBracket.ts | 2 +- .../core/Bracket/RoundRobinBracket.ts | 2 +- .../core/Bracket/SingleEliminationBracket.ts | 2 +- .../core/Bracket/SwissBracket.ts | 6 +- .../tournament-bracket/core/Bracket/index.ts | 2 +- .../tournament-bracket/core/PickBan.ts | 10 +- .../tournament-bracket/core/PreparedMaps.ts | 2 +- .../tournament-bracket/core/Progression.ts | 2 +- .../tournament-bracket/core/Swiss.test.ts | 4 +- .../core/Tournament.server.ts | 2 +- .../core/Tournament.test.ts | 2 +- .../tournament-bracket/core/Tournament.ts | 6 +- .../core/finalizeTournament.server.ts | 4 +- .../core/summarizer.server.ts | 4 +- .../core/summarizer.test.ts | 2 +- .../tournament-bracket/core/toMapList.ts | 8 +- .../to.$id.brackets.finalize.server.ts | 2 +- .../loaders/to.$id.divisions.server.ts | 2 +- .../routes/to.$id.brackets.finalize.tsx | 2 +- .../TournamentLFGRepository.server.ts | 2 +- .../actions/to.$id.looking.server.ts | 2 +- .../TournamentMatchRepository.server.ts | 4 +- .../actions/to.$id.matches.$mid.server.ts | 6 +- .../components/TournamentMatchBanner.tsx | 2 +- .../core/executeRoll.server.ts | 4 +- .../tournament-match/core/mapList.server.ts | 24 ++--- .../core/reportScore.server.ts | 6 +- .../loaders/to.$id.matches.$mid.server.ts | 2 +- .../tournament-match-utils.ts | 4 +- .../actions/org.$slug.server.ts | 4 +- .../core/leaderboards.server.ts | 2 +- .../TournamentRepository.permissions.test.ts | 2 +- .../tournament/TournamentRepository.server.ts | 4 +- .../TournamentTeamRepository.server.ts | 4 +- .../tournament/actions/to.$id.info.server.ts | 2 +- .../tournament/actions/to.$id.join.server.ts | 2 +- .../actions/to.$id.register.server.ts | 6 +- .../components/CounterPickMapPoolPicker.tsx | 2 +- .../tournament/core/Standings.test.ts | 2 +- .../app/features/tournament/core/Standings.ts | 2 +- .../features/tournament/core/sets.server.ts | 6 +- .../loaders/to.$id.teams.$tid.server.ts | 2 +- .../tournament/routes/to.$id.join.tsx | 4 +- .../tournament/routes/to.$id.rules.tsx | 2 +- .../tournament/routes/to.$id.teams.$tid.tsx | 2 +- .../tournament/tournament-utils.server.ts | 2 +- .../features/tournament/tournament-utils.ts | 2 +- .../trophies/actions/trophies.new.server.ts | 2 +- .../user-card/components/UserCard.tsx | 2 +- .../loaders/user-card.edit.server.ts | 2 +- .../user-page/UserRepository.server.ts | 4 +- .../actions/u.$identifier.admin.server.ts | 2 +- .../actions/u.$identifier.art.server.ts | 4 +- .../actions/u.$identifier.builds.server.ts | 2 +- .../features/user-page/components/Widget.tsx | 4 +- .../loaders/u.$identifier.admin.server.ts | 2 +- .../user-page/routes/u.$identifier.admin.tsx | 2 +- .../user-page/routes/u.$identifier.art.tsx | 2 +- .../routes/u.$identifier.builds.new.tsx | 2 +- .../user-page/routes/u.$identifier.edit.tsx | 2 +- .../user-page/routes/u.$identifier.index.tsx | 4 +- .../routes/u.$identifier.results.tsx | 2 +- .../routes/u.$identifier.seasons.index.tsx | 4 +- .../routes/u.$identifier.seasons.stats.tsx | 4 +- .../routes/u.$identifier.seasons.tsx | 2 +- .../user-page/routes/u.$identifier.vods.tsx | 2 +- .../app/features/vods/VodRepository.server.ts | 2 +- .../app/features/vods/routes/vods.$id.tsx | 2 +- .../app/form/fields/ImageFormField.tsx | 2 +- apps/web-react/app/hooks/swr.ts | 2 +- .../app/modules/discord-webhook.server.ts | 2 +- .../app/modules/i18n/i18next.server.ts | 2 +- apps/web-react/app/modules/patreon/updater.ts | 4 +- apps/web-react/app/modules/twitch/fetch.ts | 2 +- apps/web-react/app/modules/twitch/schemas.ts | 2 +- apps/web-react/app/modules/twitch/streams.ts | 2 +- .../app/modules/twitch/utils.server.ts | 2 +- .../app/routines/closeExpiredCommissions.ts | 2 +- .../app/routines/closeExpiredContinueVotes.ts | 2 +- .../web-react/app/routines/computeLutiDivs.ts | 2 +- .../app/routines/deleteObsoleteMatchVods.ts | 2 +- .../app/routines/deleteOldExternalStreams.ts | 2 +- .../app/routines/deleteOldNotifications.ts | 2 +- .../deleteOldPendingFriendRequests.ts | 2 +- .../routines/deleteOldScrimPickupRosters.ts | 2 +- .../routines/deleteOldTournamentAuditLogs.ts | 2 +- .../app/routines/deleteOrphanArtTags.ts | 2 +- .../app/routines/expireReadyChecks.ts | 2 +- .../app/routines/notifyCheckInStart.ts | 2 +- .../app/routines/notifyScrimStartingSoon.ts | 2 +- .../app/routines/resolveStaleSQMatches.ts | 2 +- apps/web-react/app/routines/routine.server.ts | 2 +- .../app/routines/setOldGroupsAsInactive.ts | 2 +- .../app/routines/syncTournamentVods.ts | 2 +- apps/web-react/app/utils/Test.ts | 2 +- apps/web-react/app/utils/dates.ts | 2 +- apps/web-react/app/utils/fetch.ts | 2 +- apps/web-react/app/utils/i18n.ts | 4 +- apps/web-react/app/utils/kysely.server.ts | 2 +- apps/web-react/app/utils/remix.server.ts | 4 +- apps/web-react/app/utils/strings.ts | 2 +- apps/web-react/app/utils/users.ts | 2 +- apps/web-react/app/utils/zod.ts | 4 +- apps/web-react/e2e/helpers/sidebar.ts | 2 +- apps/web-react/e2e/helpers/tournament.ts | 2 +- .../pages/associations/associations-page.ts | 2 +- .../e2e/pages/builds/user-builds-page.ts | 2 +- .../pages/sendouq/sendouq-preparing-page.ts | 2 +- .../tier-list-maker/tier-list-maker-page.ts | 2 +- apps/web-react/package.json | 4 + apps/web-react/scripts/add-badge-winners.ts | 4 +- apps/web-react/scripts/add-badge.ts | 4 +- .../add-leaderboard-teams-to-tournament.ts | 4 +- apps/web-react/scripts/benchmark-db.ts | 4 +- .../scripts/benchmark-db/fixtures.ts | 2 +- apps/web-react/scripts/check-articles.ts | 2 +- apps/web-react/scripts/check-season-status.ts | 4 +- .../web-react/scripts/create-analyzer-json.ts | 18 ++-- apps/web-react/scripts/create-gear-json.ts | 2 +- .../scripts/create-league-divisions.ts | 4 +- apps/web-react/scripts/create-misc-json.ts | 2 +- apps/web-react/scripts/delete-badge.ts | 4 +- apps/web-react/scripts/delete-skill.ts | 4 +- apps/web-react/scripts/delete-user.ts | 4 +- .../scripts/mass-add-tournaments-to-org.ts | 4 +- .../scripts/nuke-reported-weapons.ts | 4 +- .../scripts/org-monthly-active-players.ts | 2 +- apps/web-react/scripts/placements/index.ts | 4 +- apps/web-react/scripts/rename-badge.ts | 4 +- apps/web-react/scripts/replace-img-names.ts | 4 +- .../web-react/scripts/replace-weapon-names.ts | 2 +- .../scanner/bootstrap-atlas-from-fixture.ts | 16 ++- .../scripts/scanner/build-glyph-atlas.ts | 8 +- .../scanner/build-localized-entries.ts | 8 +- .../scanner/build-planner-signatures.ts | 6 +- apps/web-react/scripts/scanner/dump-crops.ts | 4 +- .../web-react/scripts/scanner/overlay-rois.ts | 16 +-- .../scripts/scanner/replay-frames.ts | 10 +- apps/web-react/scripts/scanner/report.ts | 18 ++-- .../web-react/scripts/scanner/run-fixtures.ts | 4 +- apps/web-react/scripts/scanner/scan-vod.ts | 26 ++--- .../web-react/scripts/scanner/status-audit.ts | 94 ++++++++-------- .../scripts/season-initial-powers.ts | 4 +- apps/web-react/scripts/seed-images.ts | 2 +- .../scripts/send-test-notification.ts | 4 +- apps/web-react/scripts/setup.ts | 2 +- apps/web-react/scripts/skip-plus.ts | 4 +- apps/web-react/scripts/swap-users.ts | 2 +- .../web-react/scripts/sync-homemade-badges.ts | 2 +- apps/web-react/scripts/sync-weapon-params.ts | 2 +- apps/web-react/scripts/unskip-plus.ts | 4 +- packages/build-analyzer/package.json | 19 ++++ .../build-analyzer/src}/analyzer-constants.ts | 0 .../build-analyzer/src}/analyzer-types.ts | 0 .../src}/core/ability-points.test.ts | 0 .../src}/core/ability-points.ts | 2 +- .../src}/core/abilityChunksCalc.test.ts | 0 .../src}/core/abilityChunksCalc.ts | 0 .../build-analyzer/src}/core/serializer.ts | 0 .../src}/core/specialEffects.test.ts | 0 .../src}/core/specialEffects.ts | 0 .../build-analyzer/src}/core/stats.test.ts | 2 +- .../build-analyzer/src}/core/stats.ts | 9 +- .../build-analyzer/src}/core/utils.ts | 4 +- .../src}/data/ability-values.ts | 0 .../build-analyzer/src}/data/weapon-params.ts | 0 packages/build-analyzer/tsconfig.json | 23 ++++ packages/map-list-generator/package.json | 18 ++++ .../map-list-generator/src}/MapList.test.ts | 2 +- .../map-list-generator/src}/MapList.ts | 4 +- .../src}/balanced-map-list.ts | 8 +- .../map-list-generator/src}/constants.ts | 2 +- .../src}/generation.test.ts | 4 +- .../map-pool-serializer/serializer.test.ts | 0 .../src}/map-pool-serializer/serializer.ts | 2 +- .../src}/map-pool-serializer/types.ts | 0 .../map-list-generator/src}/map-pool.ts | 9 +- .../map-list-generator/src}/source.ts | 2 +- .../map-list-generator/src}/starter-map.ts | 4 +- .../map-list-generator/src}/types.ts | 2 +- packages/map-list-generator/tsconfig.json | 23 ++++ packages/scanner-core/package.json | 19 ++++ .../scanner-core/src}/core/ability-harvest.ts | 0 .../scanner-core/src}/core/canonical.ts | 0 .../scanner-core/src}/core/cv.ts | 0 .../src}/core/detectors/death/abilities.ts | 0 .../src}/core/detectors/death/index.ts | 0 .../detectors/death/localized-messages.ts | 0 .../src}/core/detectors/death/rois.ts | 0 .../src}/core/detectors/death/weapon-names.ts | 0 .../src}/core/detectors/map-start/index.ts | 0 .../src}/core/detectors/map-start/rois.ts | 0 .../src}/core/detectors/minimap/abilities.ts | 0 .../src}/core/detectors/minimap/index.ts | 0 .../src}/core/detectors/minimap/rois.ts | 0 .../src}/core/detectors/minimap/stage.ts | 0 .../src}/core/detectors/objective/index.ts | 0 .../core/detectors/objective/player-status.ts | 0 .../src}/core/detectors/objective/rois.ts | 0 .../core/detectors/objective/strip-weapons.ts | 0 .../src}/core/detectors/registry.ts | 0 .../src}/core/detectors/scheduler.ts | 0 .../scoreboard-battle-log-replay/code.ts | 0 .../scoreboard-battle-log-replay/header.ts | 0 .../scoreboard-battle-log-replay/index.ts | 0 .../scoreboard-battle-log-replay/rois.ts | 0 .../detectors/scoreboard-battle-log/index.ts | 0 .../detectors/scoreboard-battle-log/rois.ts | 0 .../detectors/scoreboard-own/abilities.ts | 0 .../core/detectors/scoreboard-own/index.ts | 0 .../core/detectors/scoreboard-own/rois.ts | 0 .../src}/core/detectors/scoreboard/banner.ts | 0 .../src}/core/detectors/scoreboard/digits.ts | 0 .../src}/core/detectors/scoreboard/header.ts | 0 .../src}/core/detectors/scoreboard/index.ts | 0 .../src}/core/detectors/scoreboard/kits.ts | 2 +- .../src}/core/detectors/scoreboard/names.ts | 0 .../src}/core/detectors/scoreboard/pov.ts | 0 .../src}/core/detectors/scoreboard/rois.ts | 0 .../src}/core/detectors/scoreboard/row.ts | 0 .../core/detectors/scoreboard/specials.ts | 0 .../src}/core/detectors/scoreboard/weapons.ts | 0 .../src}/core/detectors/telemetry.ts | 0 .../scanner-core/src}/core/detectors/types.ts | 0 .../scanner-core/src}/core/glyphs.ts | 0 .../scanner-core/src}/core/image.ts | 0 .../scanner-core/src}/core/ink-color.ts | 0 .../src}/core/localized-entries.ts | 0 .../scanner-core/src}/core/localized.ts | 0 .../scanner-core/src}/core/match-builder.ts | 0 .../scanner-core/src}/core/match-sets.ts | 0 .../scanner-core/src}/core/replay-time.ts | 0 .../scanner-core/src}/core/resources.ts | 0 .../scanner-core/src}/core/scanner-match.ts | 0 .../src}/core/slot-row-assignment.ts | 0 .../scanner-core/src}/core/text.ts | 0 .../scanner-core/src}/core/timeline/index.ts | 0 .../src}/core/timeline/same-scoreboard.ts | 0 .../scanner-core/src}/scanner-types.ts | 0 packages/scanner-core/tsconfig.json | 23 ++++ packages/utils/package.json | 17 +++ .../utils => packages/utils/src}/invariant.ts | 0 .../utils => packages/utils/src}/logger.ts | 0 .../utils => packages/utils/src}/number.ts | 0 .../utils/src}/numbers.test.ts | 0 .../utils/src}/random.test.ts | 0 .../utils => packages/utils/src}/random.ts | 0 .../utils => packages/utils/src}/result.ts | 0 .../utils/src}/session-id.ts | 0 .../app/utils => packages/utils/src}/types.ts | 0 packages/utils/tsconfig.json | 23 ++++ pnpm-lock.yaml | 88 +++++++++++++++ svelte-big-bang.md | 7 +- tooling/codemods/README.md | 2 +- tooling/codemods/src/mono-split.ts | 102 ++++++++++++++++++ 505 files changed, 1384 insertions(+), 967 deletions(-) create mode 100644 packages/build-analyzer/package.json rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/analyzer-constants.ts (100%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/analyzer-types.ts (100%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/ability-points.test.ts (100%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/ability-points.ts (97%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/abilityChunksCalc.test.ts (100%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/abilityChunksCalc.ts (100%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/serializer.ts (100%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/specialEffects.test.ts (100%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/specialEffects.ts (100%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/stats.test.ts (99%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/stats.ts (99%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/core/utils.ts (97%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/data/ability-values.ts (100%) rename {apps/web-react/app/features/build-analyzer => packages/build-analyzer/src}/data/weapon-params.ts (100%) create mode 100644 packages/build-analyzer/tsconfig.json create mode 100644 packages/map-list-generator/package.json rename {apps/web-react/app/features/map-list-generator/core => packages/map-list-generator/src}/MapList.test.ts (99%) rename {apps/web-react/app/features/map-list-generator/core => packages/map-list-generator/src}/MapList.ts (99%) rename {apps/web-react/app/modules/tournament-map-list-generator => packages/map-list-generator/src}/balanced-map-list.ts (98%) rename {apps/web-react/app/modules/tournament-map-list-generator => packages/map-list-generator/src}/constants.ts (92%) rename {apps/web-react/app/modules/tournament-map-list-generator => packages/map-list-generator/src}/generation.test.ts (99%) rename {apps/web-react/app/features/map-list-generator/core => packages/map-list-generator/src}/map-pool-serializer/serializer.test.ts (100%) rename {apps/web-react/app/features/map-list-generator/core => packages/map-list-generator/src}/map-pool-serializer/serializer.ts (97%) rename {apps/web-react/app/features/map-list-generator/core => packages/map-list-generator/src}/map-pool-serializer/types.ts (100%) rename {apps/web-react/app/features/map-list-generator/core => packages/map-list-generator/src}/map-pool.ts (94%) rename {apps/web-react/app/modules/tournament-map-list-generator => packages/map-list-generator/src}/source.ts (94%) rename {apps/web-react/app/modules/tournament-map-list-generator => packages/map-list-generator/src}/starter-map.ts (96%) rename {apps/web-react/app/modules/tournament-map-list-generator => packages/map-list-generator/src}/types.ts (93%) create mode 100644 packages/map-list-generator/tsconfig.json create mode 100644 packages/scanner-core/package.json rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/ability-harvest.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/canonical.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/cv.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/death/abilities.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/death/index.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/death/localized-messages.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/death/rois.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/death/weapon-names.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/map-start/index.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/map-start/rois.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/minimap/abilities.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/minimap/index.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/minimap/rois.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/minimap/stage.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/objective/index.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/objective/player-status.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/objective/rois.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/objective/strip-weapons.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/registry.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scheduler.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard-battle-log-replay/code.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard-battle-log-replay/header.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard-battle-log-replay/index.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard-battle-log-replay/rois.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard-battle-log/index.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard-battle-log/rois.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard-own/abilities.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard-own/index.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard-own/rois.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/banner.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/digits.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/header.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/index.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/kits.ts (92%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/names.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/pov.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/rois.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/row.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/specials.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/scoreboard/weapons.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/telemetry.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/detectors/types.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/glyphs.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/image.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/ink-color.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/localized-entries.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/localized.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/match-builder.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/match-sets.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/replay-time.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/resources.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/scanner-match.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/slot-row-assignment.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/text.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/timeline/index.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/core/timeline/same-scoreboard.ts (100%) rename {apps/web-react/app/features/scanner => packages/scanner-core/src}/scanner-types.ts (100%) create mode 100644 packages/scanner-core/tsconfig.json create mode 100644 packages/utils/package.json rename {apps/web-react/app/utils => packages/utils/src}/invariant.ts (100%) rename {apps/web-react/app/utils => packages/utils/src}/logger.ts (100%) rename {apps/web-react/app/utils => packages/utils/src}/number.ts (100%) rename {apps/web-react/app/utils => packages/utils/src}/numbers.test.ts (100%) rename {apps/web-react/app/utils => packages/utils/src}/random.test.ts (100%) rename {apps/web-react/app/utils => packages/utils/src}/random.ts (100%) rename {apps/web-react/app/utils => packages/utils/src}/result.ts (100%) rename {apps/web-react/app/utils => packages/utils/src}/session-id.ts (100%) rename {apps/web-react/app/utils => packages/utils/src}/types.ts (100%) create mode 100644 packages/utils/tsconfig.json diff --git a/AGENTS.md b/AGENTS.md index e67baab93..1255e5b6e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,7 +1,7 @@ ## Monorepo layout - pnpm workspace (Phase 0 of `svelte-big-bang.md`): the React app lives in `apps/web-react/` — every `app/...`, `e2e/...`, `scripts/...`, `locales/...`, `migrations/...` path below is relative to it -- `packages/` holds extracted libraries (`@sendou/in-game-lists`, `@sendou/tournament-engine`); never import them via relative paths, always via the package name +- `packages/` holds extracted libraries (`@sendou/in-game-lists`, `@sendou/tournament-engine`, `@sendou/utils`, `@sendou/build-analyzer`, `@sendou/map-list-generator`, `@sendou/scanner-core`); never import them via relative paths, always via the package name - `tooling/codemods/` has the migration codemods and the `migration-manifest.json` updater; `pnpm run