Aller au contenu
Table des matières

WordsEnigma : Un jeu de mots entre Redwood et Prisma

WordsEnigma est un fork avec deux espaces Redwood, web et API. Son modèle relie utilisateurs, langues, banques de mots, parties et essais. Les services GraphQL traduisent les opérations en appels Prisma.

Application et services Fork
  • Mis à jour
  • TypeScript · 97.12%
  • Unlicense
Composants documentés
2Explorer les modules
Documents source
2Lire les instructions
Langages du dépôtTypeScript 97.12%6

Parts calculées à partir des octets GitHub Linguist.

TypeScript97.12%
97.12%487 080 octets
CSS2.22%
2.22%11 156 octets
JavaScript0.4%
0.4%2 001 octets
Dockerfile0.16%
0.16%807 octets
Langage%Octets
TypeScript97.12%487 080
CSS2.22%11 156
JavaScript0.4%2 001
Dockerfile0.16%807
HTML0.07%364
Shell0.02%125

1. Aperçu

1.1. Pourquoi il existe

Moteur de jeu et validateur de dictionnaires en TypeScript supportant plusieurs langues et longueurs de mots.

1.2. Cas d’usage

Logique de jeu de lettres algorithmique et heuristiques de résolution.

2. Cas d’utilisation

Prototype RedwoodJS d'un Wordle multilingue, avec grille de mots en français, API GraphQL et gestion admin sur PostgreSQL.

Diagramme de cas d’utilisation de WordsEnigma : Deviner un mot de 5 lettres; Créer un compte; Gérer mots et banques; Charger les mots français; Suivre parties et sériesWordsEnigmaDeviner un mot de 5 lettresCréer un compteGérer mots et banquesCharger les mots françaisSuivre parties et sériesJoueurAdministrateur«système»Dictionnaires en ligne
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
Deviner un mot de 5 lettres
Joueur

La page /phil (MotDuJourPhilPage/App.tsx) donne six essais sur une grille 6×5, refuse les mots absents de la liste française de data/fr.ts et colore les lettres et les touches ; la solution est codée en dur (GRAND).

Créer un compte
Joueur

/signup, /login, /forgot-password et /reset-password passent par dbAuth de Redwood (api/src/functions/auth.ts) sur le modèle User, avec mot de passe haché et sel.

Gérer mots et banques
Administrateur

Les routes sous /admin, protégées par Private roles="admin", offrent des pages CRUD générées pour utilisateurs, langues, mots, banques de mots, parties, essais, lettres et statistiques via les services GraphQL.

Charger les mots français
AdministrateurDictionnaires en ligne

yarn seed lance scripts/seed.ts, qui crée les langues et la banque de mots fr, puis récupère les définitions sur fr.wiktionary.org ou le-dictionnaire.com avec le robot cheerio avant d'insérer les mots.

Suivre parties et séries
Joueur

Le schéma Prisma enregistre chaque Game avec ses TryRow et Letter, et une ligne Statistic par utilisateur (parties jouées, gagnées, perdues, série, moyenne) ; le modèle existe, mais les pages de jeu ne l'alimentent pas encore.

2.1. Scénario : Lancer la grille française en local

  1. Démarrer PostgreSQL avec docker run --name=db -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=admin -p 5432:5432 -d postgres, comme dans le README racine.
  2. Dans WordsEnigma/, lancer yarn install, puis yarn rw prisma migrate dev pour appliquer api/db/migrations.
  3. Lancer yarn seed pour charger les langues, la banque fr et les mots.
  4. Démarrer yarn redwood dev et ouvrir http://localhost:8910/phil.
  5. Taper cinq lettres, valider et lire les couleurs jusqu'à trouver le mot ou épuiser les six lignes.

Fichiers consultésREADME.mdWordsEnigma/README.mdWordsEnigma/package.jsonWordsEnigma/api/db/schema.prismaWordsEnigma/web/src/Routes.tsxWordsEnigma/web/src/pages/MotDuJourPhilPage/App.tsxWordsEnigma/scripts/seed.tsWordsEnigma/scripts/words/dictionnaryCrawler/fr.tsWordsEnigma/docker-compose.yml

3. Démarrage

Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.

Commandes déclarées dans les manifestes

4. Références du dépôt

Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.

Développement et contributions

4.1. Testing with Jest

WordsEnigma/README.md

It’d be hard to scale from side project to startup without a few tests. Redwood fully integrates Jest with the front and the backends and makes it easy to keep your whole app covered by generating test files with all your components and services: To make the integration even more seamless, Redwood augments Jest with database scenarios and GraphQL mocking.
Lire les instructions complètes ↗
Documentation source

2 documents lus parmi 2 candidats.

5. Fonctions et composants 2

Relations des données
schema.prisma utilise PostgreSQL. Une Game appartient à un utilisateur et à un mot, référence une banque et possède des essais. Les langues relient mots et préférences; le multilinguisme possède donc un modèle persistant.
Services et persistance
games.ts expose les opérations de liste, lecture, création, modification et suppression avec db.game. Les résolveurs de relations chargent utilisateur, mot, banque et essais. Cette couche relie les opérations GraphQL au modèle de données.

6. Architecture

Ouvrez un composant pour suivre ses connexions, ou explorez le diagramme complet.

Composants du système Contexte
Mermaid Diagramme interactif

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de WordsEnigma
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR
  n0["Interface Redwood"]
  n1["API GraphQL"]
  n2["Résolveurs du service Game"]
  n3["Client Prisma"]
  n4["Relations PostgreSQL"]
  n0 --> n1
  n1 --> n2
  n2 --> n3
  n3 --> n4
Version texte du diagramme
  • Interface Redwood → API GraphQL
  • API GraphQL → Résolveurs du service Game
  • Résolveurs du service Game → Client Prisma
  • Client Prisma → Relations PostgreSQL
Suivre un parcours dans le code

Suivez le résolveur game vers findUnique, puis ses relations. Ces méthodes CRUD ne décrivent pas à elles seules la validation des essais et ne prouvent pas qu’un utilisateur accède seulement à ses propres parties.

7. Dossier technique

Établi à partir du code au commit a656449 (227 fichiers). Chaque élément vient d’une correspondance de motif dans le code: ouvrez le fichier lié avant de vous y fier.

7.1. Couches et modules

Les dossiers sont classés par couche selon leur nom, de l’interface utilisateur jusqu’à l’accès aux données. Comme le classement repose sur les noms seulement, le diagramme ne dit rien des appels entre couches.

Mermaid Vue en couches
flowchart TB
  subgraph L_presentation["Présentation"]
    direction TB
    presentation_0["WordsEnigma/web<br/>142 fichiers"]
  end
  subgraph L_interface["Points d’entrée et API"]
    direction TB
    interface_0["WordsEnigma/api<br/>15 fichiers"]
  end
  subgraph L_application["Services applicatifs"]
    direction TB
    application_0["WordsEnigma/api<br/>18 fichiers"]
    application_1["WordsEnigma/scripts<br/>11 fichiers"]
  end
  subgraph L_domain["Domaine et règles métier"]
    direction TB
    domain_0["WordsEnigma/web<br/>13 fichiers"]
  end
  subgraph L_infrastructure["Données et infrastructure"]
    direction TB
    infrastructure_0["WordsEnigma/api<br/>3 fichiers"]
    infrastructure_1["WordsEnigma/scripts<br/>1 fichier"]
    infrastructure_2["WordsEnigma/web<br/>1 fichier"]
  end
  subgraph L_core["Source principale"]
    direction TB
    core_0["WordsEnigma<br/>3 fichiers"]
  end
  subgraph L_tests["Tests"]
    direction TB
    tests_0["WordsEnigma<br/>17 fichiers"]
  end
  subgraph L_hosting["Build, CI et hébergement"]
    direction TB
    hosting_0["WordsEnigma<br/>4 fichiers"]
    hosting_1[".github<br/>1 fichier"]
  end
  L_presentation ~~~ L_interface
  L_interface ~~~ L_application
  L_application ~~~ L_domain
  L_domain ~~~ L_infrastructure
  L_infrastructure ~~~ L_core
  L_core ~~~ L_tests
  L_core ~~~ L_hosting
Modules et couche principale
ModuleCoucheFichiersTypesExtensions
WordsEnigma/webPrésentation15618.tsx .css .js
WordsEnigma/apiServices applicatifs360.ts .js
WordsEnigma/scriptsServices applicatifs120.ts
WordsEnigmaSource principale30.js

7.2. Modèle C4

Du contexte du système aux déclarations du code. Chaque niveau conserve les limites des sources disponibles.

UML 1 · Contexte du système
1 · Contexte du système

La vue C4 la plus large : qui utilise le projet et sur quels systèmes et stockages externes il s’appuie. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
System(SYS, "WordsEnigma", "WordsEnigma est un fork avec deux espaces Redwood, web et API")
SystemDb(D0, "Prisma")
Rel(SYS, D0, "Lit et écrit")
@enduml
UML 2 · Conteneurs
2 · Conteneurs

Un niveau plus près : les parties qui s’exécutent séparément dans le projet, leur langage principal et le chemin des appels entre elles. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Container>
LAYOUT_LEFT_RIGHT()
System_Boundary(SYS, "WordsEnigma") {
  Container(C0, "db", "Docker")
  Container(C1, "web", "Docker")
  Container(C2, "api", "Docker")
  ContainerDb(DB0, "Prisma", "")
}
Rel(C0, DB0, "Lit et écrit")
@enduml
UML 3 · Composants et couches
3 · Composants et couches

Modules regroupés par couche du code. Les limites indiquent l’organisation, sans affirmer une isolation à l’exécution ni des appels. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "WordsEnigma") {
Boundary(L0, "Présentation", "layer") {
Component(M0_0, "WordsEnigma/web", "React, .css, JavaScript", "142 fichiers")
}
Boundary(L1, "Points d’entrée et API", "layer") {
Component(M1_0, "node_modules/cheerio", "TypeScript, JavaScript", "20 fichiers")
Component(M1_1, "WordsEnigma/api", "TypeScript, JavaScript", "15 fichiers")
Component(M1_2, "node_modules/parse5", "JavaScript", "8 fichiers")
Component(M1_3, "node_modules/parse5-htmlparser2-tree-adapter", "JavaScript", "2 fichiers")
Component(M1_4, "node_modules/asynckit", "JavaScript", "1 fichiers")
Component(M1_5, "node_modules/axios", "JavaScript", "1 fichiers")
Component(M1_6, "node_modules/boolbase", "JavaScript", "1 fichiers")
Component(M1_7, "node_modules/follow-redirects", "JavaScript", "1 fichiers")
Component(M1_more, "+2 modules", "", "")
}
Boundary(L2, "Services applicatifs", "layer") {
Component(M2_0, "WordsEnigma/api", "TypeScript", "18 fichiers")
Component(M2_1, "WordsEnigma/scripts", "TypeScript", "11 fichiers")
}
Boundary(L3, "Domaine et règles métier", "layer") {
Component(M3_0, "WordsEnigma/web", "React, .css", "13 fichiers")
Component(M3_1, "node_modules/axios", "JavaScript", "8 fichiers")
Component(M3_2, "node_modules/parse5", "JavaScript", "2 fichiers")
}
Boundary(L4, "Données et infrastructure", "layer") {
Component(M4_0, "node_modules/css-select", "TypeScript, JavaScript", "44 fichiers")
Component(M4_1, "node_modules/cheerio", "TypeScript, JavaScript", "40 fichiers")
Component(M4_2, "node_modules/domutils", "TypeScript, JavaScript", "32 fichiers")
Component(M4_3, "node_modules/entities", "TypeScript, JavaScript", "32 fichiers")
Component(M4_4, "node_modules/axios", "JavaScript", "26 fichiers")
Component(M4_5, "node_modules/css-what", "TypeScript, JavaScript", "16 fichiers")
Component(M4_6, "node_modules/htmlparser2", "TypeScript, JavaScript", "16 fichiers")
Component(M4_7, "node_modules/cheerio-select", "TypeScript, JavaScript", "12 fichiers")
Component(M4_more, "+11 modules", "", "")
}
Boundary(L5, "Source principale", "layer") {
Component(M5_0, "node_modules/parse5", "TypeScript, JavaScript", "50 fichiers")
Component(M5_1, "node_modules/asynckit", "JavaScript", "5 fichiers")
Component(M5_2, "WordsEnigma", "JavaScript", "3 fichiers")
Component(M5_3, "node_modules/axios", "JavaScript, TypeScript", "3 fichiers")
Component(M5_4, "node_modules/follow-redirects", "JavaScript", "3 fichiers")
Component(M5_5, "node_modules/parse5-htmlparser2-tree-adapter", "TypeScript", "2 fichiers")
Component(M5_6, "node_modules/form-data", "TypeScript", "1 fichiers")
}
Boundary(L6, "Tests", "layer") {
Component(M6_0, "WordsEnigma", "TypeScript, React", "17 fichiers")
}
Boundary(L7, "Build, CI et hébergement", "layer") {
Component(M7_0, "WordsEnigma", "Dockerfile, .yml, .conf", "4 fichiers")
Component(M7_1, ".github", ".yml", "1 fichiers")
Component(M7_2, "node_modules", "Makefile", "1 fichiers")
}
}
@enduml
UML 4 · Code
4 · Code

Déclarations, champs et méthodes sélectionnés, regroupés par fichier source. Aucun héritage ni appel n’est déduit. Rendu avec uml-mcp.

Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "WordsEnigma" {
package "WordsEnigma/.yarn/releases/yarn-3.2.1.cjs" as F0 {
class "w6" as T0_0 {
  bufferLength()
  encoding()
  setEncoding()
  objectMode()
  write()
  read()
}
class "e" as T0_1 {
  submit()
  create()
}
}
package "WordsEnigma/web/src/pages/MotduJourPage/subcomponents/GameBoard/GameBoard.tsx" as F1 {
class "IState" as T1_0 {
  motEssayer
  motResultat
  nbMotJouer
  gagner
  banqueDeMots
  grandeBanqueMots
  motDuJour
  currentRow
}
class "IProps" as T1_1 {
  cols
  rows
}
}
package "WordsEnigma/web/src/pages/MotduJourPage/subcomponents/Rules/Rules.tsx" as F2 {
class "IProps" as T2_0 {
  Rules
}
class "IState" as T2_1 {
  Rules
}
}
package "WordsEnigma/web/src/pages/MotduJourPage/subcomponents/Header/Header.tsx" as F3 {
class "IProps" as T3_0 {
  title
}
class "IState" as T3_1 {
  Header
}
}
package "WordsEnigma/web/src/pages/MotduJourPage/subcomponents/Share/Share.tsx" as F4 {
class "IProps" as T4_0 {
  Share
}
class "IState" as T4_1 {
  Share
}
}
package "WordsEnigma/web/src/pages/MotduJourPage/subcomponents/Success/Success.tsx" as F5 {
class "IProps" as T5_0 {
  Success
}
class "IState" as T5_1 {
  Success
}
}
package "WordsEnigma/web/src/pages/MotduJourPage/subcomponents/Keyboard/Keyboard.tsx" as F6 {
class "IProps" as T6_0 {
}
class "IState" as T6_1 {
}
}
}
@enduml

7.3. Entités et modèle de données 12

Mermaid Diagramme de classes des entités
classDiagram
  direction LR
  class E0["IState"] {
  }
  class E1["IProps"] {
  }

Une flèche relie un champ à l’entité que son type nomme.

EntitéNaturePremiers champs
IStateEnregistrement ou interfacemotEssayer, motResultat, nbMotJouer, gagner, banqueDeMots, grandeBanqueMots, motDuJour, currentRow
IPropsEnregistrement ou interfacecols, rows
IPropsEnregistrement ou interfaceRules
IStateEnregistrement ou interfaceRules
IPropsEnregistrement ou interfacetitle
IPropsEnregistrement ou interfaceShare
IPropsEnregistrement ou interfaceSuccess
IStateEnregistrement ou interfaceHeader
Afficher 4 entités de plus
IStateEnregistrement ou interfaceShare
IStateEnregistrement ou interfaceSuccess
IPropsEnregistrement ou interface
IStateEnregistrement ou interface

7.4. Logique métier

Une fois écartés le code d’interface et les services et entités ci-dessus, ces classes ont le plus de méthodes.

w6 Source principale, 22 méthodes
bufferLength, encoding, setEncoding, objectMode, write, read
e Source principale, 2 méthodes
submit, create

7.5. Base de données et persistance

Tables et collections 9

User UserSetting Language Word WordBank Game Letter TryRow Statistic

3 migrations

Conteneurs de données

postgres:14.1-alpine

7.6. Intégrations externes

Clients HTTP

axios

Hôtes nommés dans le code

7.7. Stack et dépendances

Node.js WordsEnigma/package.json 2 à l’exécution, 2 dev

node >=14.19 <=16.x yarn >=1.15

Ouvrir le manifeste

Node.js WordsEnigma/api/package.json 2 à l’exécution

Ouvrir le manifeste

Node.js WordsEnigma/web/package.json 7 à l’exécution

Ouvrir le manifeste

Dépendances externes

13 paquets déclarés (11 à l’exécution, 2 pour le développement) dans WordsEnigma/package.json, WordsEnigma/api/package.json, WordsEnigma/web/package.json.

Tableau des paquets 13
Dépendances externes
PaquetVersionUsageRôleRegistre
axios^0.27.2exécutionClient HTTPnpmjs.com
cheerio^1.0.0-rc.12exécutionExtraction web et analysenpmjs.com
@getbigger-io/prisma-fixtures-cli^1.0.10développementAccès aux donnéesnpmjs.com
@redwoodjs/core1.5.2développementFoundational packages and config required to build RedwoodJS.npmjs.com
@redwoodjs/api1.5.2exécution—npmjs.com
@redwoodjs/graphql-server1.5.2exécution—npmjs.com
@redwoodjs/auth1.5.2exécution—npmjs.com
@redwoodjs/forms1.5.2exécution—npmjs.com
@redwoodjs/router1.5.2exécution—npmjs.com
@redwoodjs/web1.5.2exécution—npmjs.com
prop-types15.8.1exécutionRuntime type checking for React props and similar objects.npmjs.com
react17.0.2exécutionInterface utilisateurnpmjs.com
react-dom17.0.2exécutionInterface utilisateurnpmjs.com

7.8. Pipeline CI/CD

1 workflow GitHub Actions, 1 tâche. Chaque boîte est une tâche ; les boîtes à double bord publient ou déploient, et les flèches suivent les dépendances needs.

Mermaid Déroulement du pipeline
flowchart LR
  subgraph wf0["CI"]
    direction LR
    wf0_build["build<br/>ubuntu-latest"]
  end
  t0(["Triggers · the · workflow · on · push · or"])
  t0 --> wf0_build
Workflows, déclencheurs, tâches et cibles
WorkflowDéclencheursTâchesPublie vers
CI
.github/workflows/main.yml
Triggers, the, workflow, on, push, or
  • build ubuntu-latest
    Checkout · Setup Node.js v16 · Set up Postgres · Get yarn cache directory path · Cache yarn · Install dependencies
—

7.9. Déploiement

Mermaid Schéma de déploiement
flowchart LR
  repo[("Dépôt GitHub")]
  ci[["GitHub Actions<br/>1 workflow"]]
  image["Image Docker<br/>FROM node:16-alpine"]
  subgraph compose["Docker Compose"]
    svc_db["db"]
    svc_web["web"]
    svc_api["api"]
  end
  repo -->|"push ou demande de fusion"| ci
  ci -->|"docker build"| image
  image -->|"docker compose up"| compose
UML Déploiement
Déploiement

Le nœud extérieur est l’endroit où le code s’exécute. Chaque image de base pointe vers ce qu’elle construit, les flèches pleines mènent aux bases de données et les pointillées aux services externes. Rendu avec uml-mcp.

Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
node "Docker Compose" as H {
  node "db" as N0 <<container>>
  node "web" as N1 <<container>>
  node "api" as N2 <<container>>
}
artifact "FROM node:16-alpine" as IMG0
IMG0 ..> N0 : construit
artifact "FROM node:16-alpine" as IMG1
IMG1 ..> N0 : construit
artifact "FROM nginx" as IMG2
IMG2 ..> N0 : construit
database "Prisma" as DB0
N0 --> DB0
@enduml

Où il s’exécute

Services Compose

db web api

Images Docker de base

node:16-alpine node:16-alpine nginx

7.10. Supervision

Ce que le code consigne, mesure et expose pour savoir s’il fonctionne.

7.11. Sécurité

Chaîne d’approvisionnement

Variables d’environnement 1

La page reprend les noms sans leurs valeurs et souligne ceux qui ressemblent à des secrets.

NODE_ENV

7.12. Tests automatisés

Fichiers de test
17
Fichiers source
207
Cas de test, environ
9
Tests unitaires
17

Couverture de code

Aucun rapport chiffré de couverture dans les sources analysées.

Où sont les tests

WordsEnigma/api/src/directives/requireAuth 1 WordsEnigma/api/src/directives/skipAuth 1 WordsEnigma/api/src/services/games 1 WordsEnigma/api/src/services/languages 1 WordsEnigma/api/src/services/letters 1 WordsEnigma/api/src/services/statistics 1

Rien trouvé pour: Interface publique, Interface privée, Services.

8. Types et structure des fichiers

24 types déclarés, dont 12 dans l’aperçu des relations de base.

Diagramme des types
classDiagram
direction TB
class t95c33d5ad155["f"] {
  constructor()
}
class tdfd20eddf50b["w6"] {
  constructor()
  bufferLength()
  encoding()
  setEncoding()
}
class t2f1e841c76de["e"] {
  constructor()
  submit()
  create()
}
class t4dc7653db721["r"] {
  constructor()
  create()
}
class t9218f580818e["n"] {
  constructor()
}
class t3faaab51d666["s"] {
  constructor()
}
class tba189d78e812["IProps"] {
  <<interface>>
}
class t1f16c646b417["IState"] {
  <<interface>>
}
class t04f5a721d14f["GameBoard"] {
  constructor()
  eventBus()
  componentDidMount()
  componentWillUnmount()
}
class tdc6fb562c12d["IProps"] {
  <<interface>>
}
class tee5c605d4895["IState"] {
  <<interface>>
}
class tb608dc0b97f4["Header"] {
  constructor()
  render()
}
class b9938495049a9["jwe"] {
  <<unresolved_base>>
}
t95c33d5ad155 ..> b9938495049a9 : declared base
class b612c3a755722["p6"] {
  <<unresolved_base>>
}
tdfd20eddf50b ..> b612c3a755722 : declared base
class bc2ce90cba9ba["Jqe"] {
  <<unresolved_base>>
}
t2f1e841c76de ..> bc2ce90cba9ba : declared base
class b1d2f8b85b03d["zqe"] {
  <<unresolved_base>>
}
t4dc7653db721 ..> b1d2f8b85b03d : declared base
class b6e2409b80935["t"] {
  <<unresolved_base>>
}
t4dc7653db721 ..> b6e2409b80935 : declared base
t4dc7653db721 <|-- t9218f580818e
class b9589272b3c41["Component"] {
  <<unresolved_base>>
}
t04f5a721d14f ..> b9589272b3c41 : declared base
class b5baf1888a7d2["Component"] {
  <<unresolved_base>>
}
tb608dc0b97f4 ..> b5baf1888a7d2 : declared base

Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.

9. Référence

221 / 221 fichiers admissibles lus (962 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 2 diagnostic de syntaxe.

Ce que couvre l’analyse

Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.

Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.

11. Fichiers à lire 3

12. Glossaire

Dépôt

Les fichiers source, la configuration et l’historique versionné d’un projet.

README

Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.

Dépendance

Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.

API

Une interface par laquelle des composants logiciels échangent des requêtes et des résultats. Une API n’utilise pas nécessairement HTTP.

Conteneur

Un environnement de processus isolé créé à partir d’une image. Les données persistantes nécessitent un stockage hors de son système de fichiers temporaire.

Volume et montage de dossier

Un volume est un stockage géré par la plateforme de conteneurs ; un montage de dossier expose un chemin de l’hôte dans un conteneur.

Port publié

Un port de l’hôte associé au port d’un service dans un conteneur. Sa publication peut rendre le service accessible hors du réseau des conteneurs.

Interface en ligne de commande

Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.

Compilation

Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.

Base de données

Un système de stockage et d’interrogation de données structurées. Son schéma, ses règles d’accès et sa persistance déterminent comment l’application utilise ces données.

Fork

Un dépôt distinct dérivé d’un autre projet. Une modification du fork ne devient pas automatiquement une modification du projet amont.

13. Références

  1. antoinebou12. (2026, 5 novembre). WordsEnigma. [Software repository] github.com.
  2. antoinebou12. (2026, 5 novembre). WordsEnigma: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, 5 novembre). WordsEnigma/package.json. [Source file] github.com.
  4. antoinebou12. (2026, 5 novembre). WordsEnigma/api/db/schema.prisma. [Source file] github.com.
  5. antoinebou12. (2026, 5 novembre). WordsEnigma/api/src/services/games/games.ts. [Source file] github.com.
  6. Boucher, A. (2026, 23 octobre). WordsEnigma : Un jeu de mots entre Redwood et Prisma. [Project article] antoineboucher.info.

Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.