Replace script-order globals shared between board.js, game.js and drag.js

Offen
#32 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
48/100
Issue-Typ
Refactoring
Klarheit
Größtenteils klar
Aktivitätsstatus
Aktiv
Tech-Stack
eslint, javascript, node.js

Rechercherichtung

Read docs/ARCHITECTURE.md and .github/CONTRIBUTING.md, then trace the shared state and window accessors in js/board.js, js/game.js, and js/drag.js alongside the globals in eslint.config.js. Start by checking the test bootstrap work in related issue #40 and the existing tests in tests/. Run npm test and npm run lint; done means board rendering no longer reads game variables, missing drag dependencies raise errors, and the per-file globals list shrinks or disappears.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

severity: medium tech-debt

Summary

The seven scripts share one global scope and depend on load order. board.js and game.js read each other's variables, drag.js reaches both through window.* behind typeof guards, and eslint.config.js hand-lists the cross-file globals for every file.

Where

  • js/board.js:184 (reads moveHistory from game.js), js/game.js:109 (reads selectedSquare and possibleMoves from board.js)
  • js/game.js:908-921, js/board.js:252-266 (window getters)
  • js/drag.js:97-115, js/drag.js:230-232, js/drag.js:256
  • eslint.config.js:35-155
  • package.json:5 ("type": "module" while every file uses CommonJS exports)

Impact

Adding or moving a function means editing the source, the ESLint globals list and each test preamble. The typeof guards in drag.js turn a wiring mistake into a silent no-op (a drop that does nothing). The globals list is already stale: drag.js is granted handleBoardClick, which it does not use.

Suggested fix

  1. Move the shared test bootstrap into one helper (#40); no production change.
  2. Break the cycle: pass lastMove into updateBoardVisuals, and give selectedSquare and possibleMoves one owning module with accessors.
  3. Replace the window.* getters with one explicit namespace object and drop the typeof guards.
  4. Optionally convert to ES modules, which removes the per-file globals lists. ES modules do not load from file://, so decide first whether opening index.html directly must keep working.

Acceptance criteria

  • board.js renders without reading game.js variables
  • A missing dependency in drag.js raises an error instead of doing nothing
  • The per-file globals in eslint.config.js shrink or disappear

Getting started

  • Relevant files: js/board.js, js/game.js, js/drag.js, eslint.config.js, tests/
  • How to run tests: npm install, then npm test and npm run lint
  • Related docs: docs/ARCHITECTURE.md, .github/CONTRIBUTING.md

Filed by repo-audit/full-audit at 8a2c86c. Severity: medium. Effort: M. audit-key: tech-debt|js/board.js|window-globals

Vorherrschende Sprache
JavaScript
Sterne
4
Forks
2
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus TMHSDigital/Static_Chess

Alle Issues in TMHSDigital/Static_Chess

Ähnliche Issues

Weitere Issues zu JavaScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.