fix(lint): address 4 oxlint errors on canonical-layer-pr2

- Remove unused filterNewResults import (events batch-add-results legacy
  path was removed in Phase 4 Task 4).
- Replace import() type annotation in sync-tournament-results test with
  a top-level type import (consistent-type-imports rule).
- Hoist tableName helper out of makeFakeDb closure so it's not recreated
  per call (consistent-function-scoping rule).
- eqeqeq: replace `!= null` with explicit null/undefined checks in
  tournament-identity.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Chris Parsons 2026-05-02 03:51:14 +00:00
parent b2bb13573c
commit 1ecad47ce6
No known key found for this signature in database
3 changed files with 16 additions and 17 deletions

View file

@ -33,7 +33,7 @@ export function extractTournamentIdentity(ev: ScoringEventIdentityInput): Tourna
cleanName = trimmed.replace(YEAR_SUFFIX, "").trim();
}
if (year === null && ev.eventDate != null) {
if (year === null && ev.eventDate !== null && ev.eventDate !== undefined) {
const iso = ev.eventDate instanceof Date
? ev.eventDate.toISOString()
: String(ev.eventDate);

View file

@ -16,7 +16,7 @@ import {
type CreateEventResultData,
type UpdateEventResultData,
} from "~/models/event-result";
import { filterNewResults, findParticipantsWithoutResults } from "./admin.sports-seasons.$id.events.$eventId.helpers";
import { findParticipantsWithoutResults } from "./admin.sports-seasons.$id.events.$eventId.helpers";
import { findParticipantResultsBySportsSeasonId } from "~/models/participant-result";
import {
upsertParticipantSeasonResult,

View file

@ -1,4 +1,5 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
import type * as DrizzleOrm from "drizzle-orm";
vi.mock("~/database/context", () => ({
database: vi.fn(),
@ -78,6 +79,18 @@ interface FakeDbState {
* The service passes schema.tournamentResults etc., so we capture the real
* schema module and compare by ref.
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function tableName(table: any): string {
// drizzle-orm PgTable exposes the table name under a symbol. Try a few.
const sym = Object.getOwnPropertySymbols(table).find(
(s) => s.toString() === "Symbol(drizzle:Name)"
);
if (sym) return table[sym];
// Fallback for our shim: read `.tableName` property if set.
return table.tableName;
}
function makeFakeDb(state: FakeDbState) {
// We mirror the shape in a lazy way: each predicate function is stored on the
// call so we can match rows. In practice the service only filters by simple
@ -90,9 +103,6 @@ function makeFakeDb(state: FakeDbState) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function rowsFor(table: any): any[] {
// Table objects are drizzle PgTable objects; we identify them by name.
// drizzle PgTables expose `[Symbol.for("drizzle:Name")]` but simpler: we
// just check a known property. Schema tables have `._.name`.
// Fallback: we compare string representation.
const name = tableName(table);
switch (name) {
case "tournament_results":
@ -108,17 +118,6 @@ function makeFakeDb(state: FakeDbState) {
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function tableName(table: any): string {
// drizzle-orm PgTable exposes the table name under a symbol. Try a few.
const sym = Object.getOwnPropertySymbols(table).find(
(s) => s.toString() === "Symbol(drizzle:Name)"
);
if (sym) return table[sym];
// Fallback for our shim: read `.tableName` property if set.
return table.tableName;
}
const db = {
// ---------- select ----------
select: vi.fn().mockImplementation(() => {
@ -208,7 +207,7 @@ function makeFakeDb(state: FakeDbState) {
// ---------------------------------------------------------------------------
vi.mock("drizzle-orm", async () => {
const actual = await vi.importActual<typeof import("drizzle-orm")>("drizzle-orm");
const actual = await vi.importActual<typeof DrizzleOrm>("drizzle-orm");
return {
...actual,
// eslint-disable-next-line @typescript-eslint/no-explicit-any