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

Aperta
#32 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
eslint, javascript, node.js

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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

Lingua principale
JavaScript
Stelle
4
Fork
2
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di TMHSDigital/Static_Chess

Tutte le issue di TMHSDigital/Static_Chess

Issue simili

Altre issue su JavaScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.