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

Abierto
#32 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
48/100
Tipo de issue
Refactorización
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
eslint, javascript, node.js

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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

Lenguaje dominante
JavaScript
Estrellas
4
Forks
2
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de TMHSDigital/Static_Chess

Todos los issues de TMHSDigital/Static_Chess

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.