better-review 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +32 -12
  2. package/dist/cli.js +1044 -1598
  3. package/dist/web/assets/highlight.worker-BOqhB448.js +153 -0
  4. package/dist/web/assets/{html-Bv1KyTF7.js → html-B3xvRgDO.js} +1 -1
  5. package/dist/web/assets/html-BHZv6uqE.js +1 -0
  6. package/dist/web/assets/{index-DXvPQh0-.js → index--X0HmlXh.js} +4 -2
  7. package/dist/web/assets/{index-vJUACaoV.css → index-CZyRc3NX.css} +1 -1
  8. package/dist/web/assets/{json-B88Oqtu5.js → json-qhed-kSA.js} +1 -1
  9. package/dist/web/assets/{jsx-D3KKoC5L.js → jsx-Bz0zcwM4.js} +1 -1
  10. package/dist/web/assets/{markdown-CboqBxpY.js → markdown-BYOwaDjH.js} +1 -1
  11. package/dist/web/assets/scss-8bKmll0B.js +1 -0
  12. package/dist/web/assets/{tsx-BOvsFOI6.js → tsx-udAQXfEw.js} +1 -1
  13. package/dist/web/assets/{typescript-j_1H8WHN.js → typescript-bsJCZSQ-.js} +1 -1
  14. package/dist/web/index.html +2 -2
  15. package/package.json +1 -1
  16. package/dist/web/assets/astro-BGCLva2-.js +0 -1
  17. package/dist/web/assets/bat-qdxAdBWQ.js +0 -1
  18. package/dist/web/assets/c-Cz4nF6n_.js +0 -1
  19. package/dist/web/assets/c-SSSlmE39.js +0 -1
  20. package/dist/web/assets/clojure-DqKBuwfJ.js +0 -1
  21. package/dist/web/assets/cmake-Bj61d0ZC.js +0 -1
  22. package/dist/web/assets/cpp-DK5F0KO4.js +0 -1
  23. package/dist/web/assets/cpp-pF_afpy8.js +0 -1
  24. package/dist/web/assets/csharp-dmMxLVLW.js +0 -1
  25. package/dist/web/assets/dart-CHZY9Xhz.js +0 -1
  26. package/dist/web/assets/diff-woXpYk--.js +0 -1
  27. package/dist/web/assets/dockerfile-IyjqRm3v.js +0 -1
  28. package/dist/web/assets/dotenv-CuH5my32.js +0 -1
  29. package/dist/web/assets/elixir-DcSoMxCm.js +0 -1
  30. package/dist/web/assets/erlang-59ohNboI.js +0 -1
  31. package/dist/web/assets/fsharp-D2W_zG4w.js +0 -1
  32. package/dist/web/assets/gleam-CSRkHgEL.js +0 -1
  33. package/dist/web/assets/go-rLFTqkRN.js +0 -1
  34. package/dist/web/assets/graphql-BoW1g5X9.js +0 -1
  35. package/dist/web/assets/graphql-C2HCcBds.js +0 -1
  36. package/dist/web/assets/groovy-CacY0gHj.js +0 -1
  37. package/dist/web/assets/haskell-D8IpX4py.js +0 -1
  38. package/dist/web/assets/hcl-Dh228itO.js +0 -1
  39. package/dist/web/assets/highlight.worker-D2jBd466.js +0 -153
  40. package/dist/web/assets/html-DZNlqGBh.js +0 -1
  41. package/dist/web/assets/ini-0B7NLFlx.js +0 -1
  42. package/dist/web/assets/ini-DiZ1IqbV.js +0 -1
  43. package/dist/web/assets/java-BtIQNnN0.js +0 -1
  44. package/dist/web/assets/java-_ATy9zCa.js +0 -1
  45. package/dist/web/assets/json-C3WlssX3.js +0 -1
  46. package/dist/web/assets/json5-BR5RXkoi.js +0 -1
  47. package/dist/web/assets/jsx-C4yDKi0A.js +0 -1
  48. package/dist/web/assets/julia-CBcsyk3j.js +0 -1
  49. package/dist/web/assets/kotlin-DhhofPvG.js +0 -1
  50. package/dist/web/assets/lua-B0e3uOiv.js +0 -1
  51. package/dist/web/assets/lua-pjIdZuk8.js +0 -1
  52. package/dist/web/assets/makefile-Dixweg8N.js +0 -1
  53. package/dist/web/assets/markdown-CjQmuOi1.js +0 -1
  54. package/dist/web/assets/mdx-DQZ5AkYe.js +0 -1
  55. package/dist/web/assets/nginx-DbUAZ-J7.js +0 -1
  56. package/dist/web/assets/nix-Cl_7024t.js +0 -1
  57. package/dist/web/assets/objective-c-D1A_Heim.js +0 -1
  58. package/dist/web/assets/ocaml-O90oeIOV.js +0 -1
  59. package/dist/web/assets/perl-CCy4CjC0.js +0 -1
  60. package/dist/web/assets/php-3goRFXPs.js +0 -1
  61. package/dist/web/assets/postcss-D_Wz94rJ.js +0 -1
  62. package/dist/web/assets/powershell-QtSnmXcu.js +0 -1
  63. package/dist/web/assets/prisma-DMgNhnYS.js +0 -1
  64. package/dist/web/assets/properties-DiZ1IqbV.js +0 -1
  65. package/dist/web/assets/proto-DB4EqR-F.js +0 -1
  66. package/dist/web/assets/python-C5TF47hQ.js +0 -1
  67. package/dist/web/assets/python-CzFU0dpx.js +0 -1
  68. package/dist/web/assets/r-BXEss897.js +0 -1
  69. package/dist/web/assets/r-DWzjseEo.js +0 -1
  70. package/dist/web/assets/ruby-ChLscevq.js +0 -1
  71. package/dist/web/assets/rust-DpiIf5JO.js +0 -1
  72. package/dist/web/assets/scala-BiFt_7mu.js +0 -1
  73. package/dist/web/assets/shellscript-CVTB3cr6.js +0 -1
  74. package/dist/web/assets/shellscript-CqHdAlCp.js +0 -1
  75. package/dist/web/assets/sql-CNu3Or2W.js +0 -1
  76. package/dist/web/assets/sql-CfM2IJm3.js +0 -1
  77. package/dist/web/assets/svelte-Bte6OA2r.js +0 -1
  78. package/dist/web/assets/swift-CyEgAFGc.js +0 -1
  79. package/dist/web/assets/terraform-DswuEJGm.js +0 -1
  80. package/dist/web/assets/toml-CcmNWLt0.js +0 -1
  81. package/dist/web/assets/tsx-CGosfAUg.js +0 -1
  82. package/dist/web/assets/typescript-Bb1J8qyy.js +0 -1
  83. package/dist/web/assets/vue-CcmjViMa.js +0 -1
  84. package/dist/web/assets/xml-Bvlx11yh.js +0 -1
  85. package/dist/web/assets/xml-Byfru430.js +0 -1
  86. package/dist/web/assets/yaml-DDA_XMNu.js +0 -1
  87. package/dist/web/assets/yaml-DijMHRDA.js +0 -1
  88. package/dist/web/assets/zig-CMLA9XwU.js +0 -1
package/README.md CHANGED
@@ -71,10 +71,14 @@ sans changer l'ordre).
71
71
  | Arbre | Dossiers repliables (sous-dossiers avant fichiers, A→Z ou Taille) avec changements, fichiers vus, threads |
72
72
  | Liens | Fichiers en ordre de lecture « base d'abord », nombre d'imports / d'utilisateurs, graphe plein écran |
73
73
 
74
- Les liens sont calculés côté serveur sur le contenu complet des fichiers au head de la PR : AST TypeScript pour
75
- TS/JS (y compris `.js` → `.ts`, `require`, `import()`), règles dédiées pour Python, CSS/SCSS/Less, Go, Java/Kotlin,
76
- C/C++, Rust, Ruby, Vue/Svelte. Les mentions (nom de fichier en CamelCase, ou nom avec extension, ou chemin) couvrent
77
- la doc et les autres langages. Les alias `tsconfig` `paths` autres que `@/`, `~/`, `#` ne sont pas résolus.
74
+ **Langages pris en charge** : TypeScript / JavaScript, HTML, CSS / SCSS / Sass / Less, Markdown, JSON et texte brut
75
+ (`.txt`). Seuls les fichiers de ces langages sont analysés et colorés ; les autres s'affichent en texte simple et
76
+ peuvent seulement être la cible d'un lien. Les liens sont calculés côté serveur sur le contenu complet des fichiers au
77
+ head de la PR : AST TypeScript pour TS/JS (y compris `.js` → `.ts`, `require`, `import()`) ; `<script src>` et
78
+ `<link href>` pour HTML (URL relatives, ou `/…` depuis le dossier de la page) ; `@import` / `@use` / `@forward` pour les
79
+ feuilles de style (partiels `_x.scss`, `index`, chemins de chargement) ; les mentions (nom de fichier en CamelCase, ou
80
+ nom avec extension, ou chemin) valent pour tous ces langages. Les alias `tsconfig` `paths` autres que `@/`, `~/`, `#`
81
+ ne sont pas résolus.
78
82
 
79
83
  **Ordre « base d'abord »** (vue Liens) : ordre topologique, chaque fichier après ceux qu'il importe ou mentionne, les
80
84
  plus utilisés en premier, les cycles départagés de la même façon et les fichiers sans lien à la fin. On relit la PR de
@@ -83,12 +87,11 @@ ses fondations vers ce qui les assemble.
83
87
  **Voisinage** (onglet du panneau de droite, 520 px, quelle que soit la vue de gauche) : graphe du fichier courant, ce
84
88
  qu'il utilise → fichier → ce qui l'utilise, avec tous ses voisins ; clic sur un voisin pour l'ouvrir.
85
89
 
86
- **Monorepos** : chaque dossier contenant un manifeste (`package.json`, `pyproject.toml`, `setup.py`, `go.mod`,
87
- `Cargo.toml`, `pom.xml`, `build.gradle`, `composer.json`) est un package ; à partir de deux, l'ordre devient
90
+ **Monorepos** : chaque dossier contenant un `package.json` est un package ; à partir de deux, l'ordre devient
88
91
  hiérarchique : packages du plus utilisé au plus dépendant (dépendances déclarées entre packages du workspace, y
89
92
  compris via un package non modifié, + imports entre fichiers), puis la base d'abord dans chaque package. Les imports
90
- par nom de package (`@acme/shared`, `@acme/shared/x`, crates Rust) sont résolus vers le point d'entrée du package
91
- (`exports` / `main` / `types` de `package.json`, sources `src/` correspondantes, `src/index.*`, `src/lib.rs`). La
93
+ par nom de package (`@acme/shared`, `@acme/shared/x`) sont résolus vers le point d'entrée du package
94
+ (`exports` / `main` / `types` de `package.json`, sources `src/` correspondantes, `src/index.*`). La
92
95
  vue Liens groupe les fichiers par package et le graphe plein écran les encadre ; il affiche aussi les autres packages du
93
96
  monorepo et les dépendances entre packages (option « Autres packages du monorepo ») : en couleur uniquement les
94
97
  packages qui contiennent des fichiers modifiés (et les liens entre eux), le reste en gris. Le graphe de voisinage
@@ -101,13 +104,30 @@ La description de la PR s'ouvre dans l'onglet « Description » du panneau de dr
101
104
  ## Architecture
102
105
 
103
106
  ```
104
- apps/cli paquet npm `better-review` : serveur + packages du workspace groupés par esbuild, front compilé dans dist/web
105
- apps/server Node + Hono + tRPC v11 : proxy GitHub (GraphQL, diffs REST), SQLite, polling → subscriptions SSE
106
- apps/web Vite + React + Mantine, TanStack Router / Query, diff virtualisé, coloration Shiki en Web Worker
107
- packages/shared schémas zod, parseur de diff unifié (empreinte de hunk partagée serveur / navigateur)
107
+ apps/cli paquet npm `better-review` : serveur + packages du workspace groupés par esbuild, front dans dist/web
108
+ apps/server Node + Hono + tRPC v11 : proxy GitHub (GraphQL, diffs REST), SQLite, polling → subscriptions SSE
109
+ apps/web Vite + React + Mantine, TanStack Router / Query, diff virtualisé, coloration Shiki en Web Worker
110
+ packages/shared schémas zod, parseur de diff unifié (empreinte de hunk partagée serveur / navigateur)
111
+ packages/language briques communes aux langages : registre, chemins, index des fichiers, contrats d'analyse / coloration
112
+ packages/lang-typescript TS / JS : imports (AST TypeScript), écosystème npm (package.json), grammaires Shiki
113
+ packages/lang-html HTML : `<script src>`, `<link href>`, grammaire Shiki
114
+ packages/lang-css CSS / SCSS / Sass / Less : `@import` / `@use` / `@forward` (résolution façon Sass), grammaires Shiki
115
+ packages/lang-markdown Markdown : mentions, grammaire Shiki
116
+ packages/lang-json JSON / JSONC : mentions, grammaires Shiki
117
+ packages/lang-text texte brut : mentions
108
118
  ```
109
119
 
120
+ Chaque package de langage expose une partie `./analysis` (serveur : `LanguageAnalyzer`, et `Ecosystem` pour les
121
+ manifestes) et une partie `./highlight` (navigateur : `LanguageHighlighter`, grammaires chargées à la demande). Ajouter
122
+ un langage : créer `packages/lang-<nom>` sur ce modèle, puis l'enregistrer dans `apps/server/src/languages.ts` et
123
+ `apps/web/src/highlight/languages.ts` (seuls points d'enregistrement).
124
+
110
125
  - Les diffs sont demandés entre deux SHA (immuables) et mis en cache définitivement.
126
+ - La coloration syntaxique porte sur le fichier entier (blobs désignés par les lignes `index` du diff, mis en cache
127
+ définitivement) : un commentaire ou une chaîne ouvert hors d'un hunk est coloré correctement. Fichier trop gros ou
128
+ indisponible : seules les lignes du diff sont colorées.
129
+ - Un commentaire, une réponse ou un nouveau thread s'affiche dès la réponse de GitHub ; la PR est rechargée ensuite en
130
+ arrière-plan.
111
131
  - L'inbox fait une recherche « ids seulement » par section puis charge chaque PR une seule fois
112
132
  (≈ 1 point de quota GraphQL par PR).
113
133
  - Une PR ouverte est surveillée toutes les 30 s, l'inbox toutes les 2 min ; un changement côté GitHub