next-auto-i18n 0.8.0 → 1.0.2

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 (243) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/DOCUMENTATION.md +246 -1034
  3. package/LICENSE +21 -21
  4. package/MIGRATION.md +76 -0
  5. package/README.md +140 -243
  6. package/dist/adapters/fs/index.d.ts +20 -0
  7. package/dist/adapters/fs/index.d.ts.map +1 -0
  8. package/dist/{scanner → adapters/fs}/index.js +44 -52
  9. package/dist/adapters/fs/index.js.map +1 -0
  10. package/dist/adapters/project/index.d.ts +22 -0
  11. package/dist/adapters/project/index.d.ts.map +1 -0
  12. package/dist/adapters/project/index.js +56 -0
  13. package/dist/adapters/project/index.js.map +1 -0
  14. package/dist/adapters/scaffold/index.d.ts +24 -0
  15. package/dist/adapters/scaffold/index.d.ts.map +1 -0
  16. package/dist/adapters/scaffold/index.js +111 -0
  17. package/dist/adapters/scaffold/index.js.map +1 -0
  18. package/dist/adapters/scaffold/templates.d.ts +12 -0
  19. package/dist/adapters/scaffold/templates.d.ts.map +1 -0
  20. package/dist/adapters/scaffold/templates.js +189 -0
  21. package/dist/adapters/scaffold/templates.js.map +1 -0
  22. package/dist/adapters/translation/deepl.d.ts +15 -0
  23. package/dist/adapters/translation/deepl.d.ts.map +1 -0
  24. package/dist/adapters/translation/deepl.js +95 -0
  25. package/dist/adapters/translation/deepl.js.map +1 -0
  26. package/dist/adapters/translation/index.d.ts +9 -0
  27. package/dist/adapters/translation/index.d.ts.map +1 -0
  28. package/dist/adapters/translation/index.js +17 -0
  29. package/dist/adapters/translation/index.js.map +1 -0
  30. package/dist/adapters/translation/types.d.ts +25 -0
  31. package/dist/adapters/translation/types.d.ts.map +1 -0
  32. package/dist/adapters/translation/types.js +18 -0
  33. package/dist/adapters/translation/types.js.map +1 -0
  34. package/dist/cli/index.js +50 -449
  35. package/dist/cli/index.js.map +1 -1
  36. package/dist/cli/prompts.d.ts +2 -17
  37. package/dist/cli/prompts.d.ts.map +1 -1
  38. package/dist/cli/prompts.js +18 -60
  39. package/dist/cli/prompts.js.map +1 -1
  40. package/dist/commands/check.d.ts +17 -0
  41. package/dist/commands/check.d.ts.map +1 -0
  42. package/dist/commands/check.js +40 -0
  43. package/dist/commands/check.js.map +1 -0
  44. package/dist/commands/init.d.ts +26 -0
  45. package/dist/commands/init.d.ts.map +1 -0
  46. package/dist/commands/init.js +69 -0
  47. package/dist/commands/init.js.map +1 -0
  48. package/dist/commands/sync.d.ts +14 -0
  49. package/dist/commands/sync.d.ts.map +1 -0
  50. package/dist/commands/sync.js +30 -0
  51. package/dist/commands/sync.js.map +1 -0
  52. package/dist/config/index.d.ts +29 -0
  53. package/dist/config/index.d.ts.map +1 -0
  54. package/dist/config/index.js +58 -0
  55. package/dist/config/index.js.map +1 -0
  56. package/dist/core/catalog/index.d.ts +34 -0
  57. package/dist/core/catalog/index.d.ts.map +1 -0
  58. package/dist/core/catalog/index.js +79 -0
  59. package/dist/core/catalog/index.js.map +1 -0
  60. package/dist/core/check/index.d.ts +35 -0
  61. package/dist/core/check/index.d.ts.map +1 -0
  62. package/dist/core/check/index.js +43 -0
  63. package/dist/core/check/index.js.map +1 -0
  64. package/dist/core/extraction/index.d.ts +17 -0
  65. package/dist/core/extraction/index.d.ts.map +1 -0
  66. package/dist/core/extraction/index.js +242 -0
  67. package/dist/core/extraction/index.js.map +1 -0
  68. package/dist/core/extraction/parse.d.ts +8 -0
  69. package/dist/core/extraction/parse.d.ts.map +1 -0
  70. package/dist/core/extraction/parse.js +21 -0
  71. package/dist/core/extraction/parse.js.map +1 -0
  72. package/dist/core/filters/index.d.ts +14 -0
  73. package/dist/core/filters/index.d.ts.map +1 -0
  74. package/dist/{scanner/filters.js → core/filters/index.js} +24 -39
  75. package/dist/core/filters/index.js.map +1 -0
  76. package/dist/core/guide/index.d.ts +47 -0
  77. package/dist/core/guide/index.d.ts.map +1 -0
  78. package/dist/core/guide/index.js +138 -0
  79. package/dist/core/guide/index.js.map +1 -0
  80. package/dist/core/index.d.ts +15 -0
  81. package/dist/core/index.d.ts.map +1 -0
  82. package/dist/core/index.js +15 -0
  83. package/dist/core/index.js.map +1 -0
  84. package/dist/core/keys/index.d.ts +23 -0
  85. package/dist/core/keys/index.d.ts.map +1 -0
  86. package/dist/core/keys/index.js +58 -0
  87. package/dist/core/keys/index.js.map +1 -0
  88. package/dist/core/scan/index.d.ts +29 -0
  89. package/dist/core/scan/index.d.ts.map +1 -0
  90. package/dist/core/scan/index.js +35 -0
  91. package/dist/core/scan/index.js.map +1 -0
  92. package/dist/core/types.d.ts +46 -0
  93. package/dist/core/types.d.ts.map +1 -0
  94. package/dist/core/types.js +11 -0
  95. package/dist/core/types.js.map +1 -0
  96. package/dist/index.d.ts +16 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +21 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/pipeline/scan.d.ts +22 -0
  101. package/dist/pipeline/scan.d.ts.map +1 -0
  102. package/dist/pipeline/scan.js +35 -0
  103. package/dist/pipeline/scan.js.map +1 -0
  104. package/dist/pipeline/sync.d.ts +37 -0
  105. package/dist/pipeline/sync.d.ts.map +1 -0
  106. package/dist/pipeline/sync.js +63 -0
  107. package/dist/pipeline/sync.js.map +1 -0
  108. package/dist/pipeline/translate.d.ts +34 -0
  109. package/dist/pipeline/translate.d.ts.map +1 -0
  110. package/dist/pipeline/translate.js +82 -0
  111. package/dist/pipeline/translate.js.map +1 -0
  112. package/dist/reporting/check.d.ts +7 -0
  113. package/dist/reporting/check.d.ts.map +1 -0
  114. package/dist/reporting/check.js +51 -0
  115. package/dist/reporting/check.js.map +1 -0
  116. package/dist/reporting/init.d.ts +6 -0
  117. package/dist/reporting/init.d.ts.map +1 -0
  118. package/dist/reporting/init.js +29 -0
  119. package/dist/reporting/init.js.map +1 -0
  120. package/dist/reporting/sync.d.ts +6 -0
  121. package/dist/reporting/sync.d.ts.map +1 -0
  122. package/dist/reporting/sync.js +49 -0
  123. package/dist/reporting/sync.js.map +1 -0
  124. package/package.json +86 -72
  125. package/schema/auto-i18n.config.schema.json +54 -0
  126. package/dist/cli/doc-generator.d.ts +0 -22
  127. package/dist/cli/doc-generator.d.ts.map +0 -1
  128. package/dist/cli/doc-generator.js +0 -176
  129. package/dist/cli/doc-generator.js.map +0 -1
  130. package/dist/engine/analysis.d.ts +0 -10
  131. package/dist/engine/analysis.d.ts.map +0 -1
  132. package/dist/engine/analysis.js +0 -139
  133. package/dist/engine/analysis.js.map +0 -1
  134. package/dist/engine/apply.d.ts +0 -11
  135. package/dist/engine/apply.d.ts.map +0 -1
  136. package/dist/engine/apply.js +0 -265
  137. package/dist/engine/apply.js.map +0 -1
  138. package/dist/engine/index.d.ts +0 -6
  139. package/dist/engine/index.d.ts.map +0 -1
  140. package/dist/engine/index.js +0 -6
  141. package/dist/engine/index.js.map +0 -1
  142. package/dist/engine/planning.d.ts +0 -24
  143. package/dist/engine/planning.d.ts.map +0 -1
  144. package/dist/engine/planning.js +0 -192
  145. package/dist/engine/planning.js.map +0 -1
  146. package/dist/engine/report.d.ts +0 -6
  147. package/dist/engine/report.d.ts.map +0 -1
  148. package/dist/engine/report.js +0 -132
  149. package/dist/engine/report.js.map +0 -1
  150. package/dist/engine/types.d.ts +0 -104
  151. package/dist/engine/types.d.ts.map +0 -1
  152. package/dist/engine/types.js +0 -2
  153. package/dist/engine/types.js.map +0 -1
  154. package/dist/generator/index.d.ts +0 -23
  155. package/dist/generator/index.d.ts.map +0 -1
  156. package/dist/generator/index.js +0 -57
  157. package/dist/generator/index.js.map +0 -1
  158. package/dist/generator/key-builder.d.ts +0 -8
  159. package/dist/generator/key-builder.d.ts.map +0 -1
  160. package/dist/generator/key-builder.js +0 -37
  161. package/dist/generator/key-builder.js.map +0 -1
  162. package/dist/injector/config-injector.d.ts +0 -11
  163. package/dist/injector/config-injector.d.ts.map +0 -1
  164. package/dist/injector/config-injector.js +0 -56
  165. package/dist/injector/config-injector.js.map +0 -1
  166. package/dist/injector/index.d.ts +0 -58
  167. package/dist/injector/index.d.ts.map +0 -1
  168. package/dist/injector/index.js +0 -92
  169. package/dist/injector/index.js.map +0 -1
  170. package/dist/injector/layout-injector.d.ts +0 -10
  171. package/dist/injector/layout-injector.d.ts.map +0 -1
  172. package/dist/injector/layout-injector.js +0 -108
  173. package/dist/injector/layout-injector.js.map +0 -1
  174. package/dist/injector/locale-structure-injector.d.ts +0 -9
  175. package/dist/injector/locale-structure-injector.d.ts.map +0 -1
  176. package/dist/injector/locale-structure-injector.js +0 -160
  177. package/dist/injector/locale-structure-injector.js.map +0 -1
  178. package/dist/injector/middleware-injector.d.ts +0 -10
  179. package/dist/injector/middleware-injector.d.ts.map +0 -1
  180. package/dist/injector/middleware-injector.js +0 -59
  181. package/dist/injector/middleware-injector.js.map +0 -1
  182. package/dist/injector/request-injector.d.ts +0 -9
  183. package/dist/injector/request-injector.d.ts.map +0 -1
  184. package/dist/injector/request-injector.js +0 -44
  185. package/dist/injector/request-injector.js.map +0 -1
  186. package/dist/injector/routing-injector.d.ts +0 -13
  187. package/dist/injector/routing-injector.d.ts.map +0 -1
  188. package/dist/injector/routing-injector.js +0 -39
  189. package/dist/injector/routing-injector.js.map +0 -1
  190. package/dist/injector/switcher-injector.d.ts +0 -9
  191. package/dist/injector/switcher-injector.d.ts.map +0 -1
  192. package/dist/injector/switcher-injector.js +0 -298
  193. package/dist/injector/switcher-injector.js.map +0 -1
  194. package/dist/rewriter/attr-rewriter.d.ts +0 -3
  195. package/dist/rewriter/attr-rewriter.d.ts.map +0 -1
  196. package/dist/rewriter/attr-rewriter.js +0 -38
  197. package/dist/rewriter/attr-rewriter.js.map +0 -1
  198. package/dist/rewriter/const-rewriter.d.ts +0 -10
  199. package/dist/rewriter/const-rewriter.d.ts.map +0 -1
  200. package/dist/rewriter/const-rewriter.js +0 -154
  201. package/dist/rewriter/const-rewriter.js.map +0 -1
  202. package/dist/rewriter/index.d.ts +0 -31
  203. package/dist/rewriter/index.d.ts.map +0 -1
  204. package/dist/rewriter/index.js +0 -144
  205. package/dist/rewriter/index.js.map +0 -1
  206. package/dist/rewriter/jsx-rewriter.d.ts +0 -13
  207. package/dist/rewriter/jsx-rewriter.d.ts.map +0 -1
  208. package/dist/rewriter/jsx-rewriter.js +0 -158
  209. package/dist/rewriter/jsx-rewriter.js.map +0 -1
  210. package/dist/scanner/ast-parser.d.ts +0 -10
  211. package/dist/scanner/ast-parser.d.ts.map +0 -1
  212. package/dist/scanner/ast-parser.js +0 -50
  213. package/dist/scanner/ast-parser.js.map +0 -1
  214. package/dist/scanner/filters.d.ts +0 -10
  215. package/dist/scanner/filters.d.ts.map +0 -1
  216. package/dist/scanner/filters.js.map +0 -1
  217. package/dist/scanner/index.d.ts +0 -31
  218. package/dist/scanner/index.d.ts.map +0 -1
  219. package/dist/scanner/index.js.map +0 -1
  220. package/dist/scanner/string-extractor.d.ts +0 -21
  221. package/dist/scanner/string-extractor.d.ts.map +0 -1
  222. package/dist/scanner/string-extractor.js +0 -198
  223. package/dist/scanner/string-extractor.js.map +0 -1
  224. package/dist/translator/deepl.d.ts +0 -18
  225. package/dist/translator/deepl.d.ts.map +0 -1
  226. package/dist/translator/deepl.js +0 -110
  227. package/dist/translator/deepl.js.map +0 -1
  228. package/dist/translator/index.d.ts +0 -16
  229. package/dist/translator/index.d.ts.map +0 -1
  230. package/dist/translator/index.js +0 -88
  231. package/dist/translator/index.js.map +0 -1
  232. package/dist/translator/provider.d.ts +0 -5
  233. package/dist/translator/provider.d.ts.map +0 -1
  234. package/dist/translator/provider.js +0 -25
  235. package/dist/translator/provider.js.map +0 -1
  236. package/dist/utils/config.d.ts +0 -15
  237. package/dist/utils/config.d.ts.map +0 -1
  238. package/dist/utils/config.js +0 -46
  239. package/dist/utils/config.js.map +0 -1
  240. package/dist/utils/deps.d.ts +0 -9
  241. package/dist/utils/deps.d.ts.map +0 -1
  242. package/dist/utils/deps.js +0 -50
  243. package/dist/utils/deps.js.map +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,140 @@
1
+ # Changelog
2
+
3
+ ## [1.0.2] - 2026-06-03
4
+
5
+ ### Added
6
+
7
+ - **`MIGRATION.md`** : guide de migration 0.x → 1.0 (français + résumé anglais pour les notes de release), livré dans le package et lié depuis le README.
8
+
9
+ ## [1.0.1] - 2026-06-03
10
+
11
+ ### Added
12
+
13
+ - **JSON Schema** (`schema/auto-i18n.config.schema.json`) pour `auto-i18n.config.json` : autocomplétion, validation et infobulles dans VSCode. `init` écrit désormais `"$schema"` dans la config générée.
14
+ - **Entrée bibliothèque** (`main`/`types`/`exports`) : `import { runCheck, runSync } from 'next-auto-i18n'` sans exécuter le CLI. Le binaire reste exposé via `bin`.
15
+ - Section « Usage programmatique » dans le README et exemples dans `--help`.
16
+
17
+ ### Changed
18
+
19
+ - `package.json` : `exports` map, `sideEffects: false`, `files` inclut `schema/` et `CHANGELOG.md`, scripts `typecheck` et `test:run`, description à jour.
20
+
21
+ ## [1.0.0] - 2026-06-03 - Refonte majeure (zéro-mutation)
22
+
23
+ Réécriture complète vers une architecture `core` pur + `adapters`. **Breaking change** : le CLI ne réécrit plus le code source.
24
+
25
+ ### Changed
26
+
27
+ - **Modèle zéro-mutation** : l'outil ne modifie plus le JSX / les composants. Il détecte, catalogue, traduit et génère un **guide d'intégration** (`i18n-guide.md`) décrivant le câblage `t()` fichier par fichier. C'était la principale source d'erreurs en projet réel.
28
+ - **Infra `next-intl` additive** : `i18n/routing.ts`, `i18n/request.ts`, middleware/proxy, plugin `next.config` (avec backup) et `LanguageSwitcher` ne sont créés que s'ils sont absents. Plus de restructuration automatique de `app/[locale]` (instructions dans le guide).
29
+ - **Surface réduite à 3 commandes** : `init`, `sync`, `check`.
30
+ - **`check`** : nouvelle commande read-only pour la CI (`--json`, code de sortie ≠ 0 si travail en attente).
31
+ - **Provider de traduction abstrait** : interface `TranslationProvider` (DeepL implémenté), extensible.
32
+ - `auto-i18n.config.json` : seuls `sourceLocale` et `targetLocales` sont requis, le reste reçoit des défauts.
33
+
34
+ ### Removed
35
+
36
+ - Commandes `add-locale`, `missing`, `extract`, `extract sync` (remplacées par `init`/`sync`/`check`).
37
+ - Réécriture AST du code source (`src/rewriter`) et restructuration `app/[locale]` automatique.
38
+
39
+ ### Fixed
40
+
41
+ - La version affichée par le CLI est désormais lue depuis `package.json` (était figée à `0.7.3`).
42
+
43
+ ### Architecture
44
+
45
+ - `src/core` (pur, sans I/O, 100 % testable) ← `src/pipeline` (orchestration) ← `src/commands` ← `src/cli`. `src/adapters` (fs, project, scaffold, translation) pour l'I/O. Suite de tests : 66 cas.
46
+
47
+ ## [0.7.3] - 2026-04-07
48
+
49
+ ### Added
50
+
51
+ - **Commande `extract`** : scanne le projet, génère les fichiers de traduction et produit un guide d'intégration Markdown (`i18n-guide.md`) — **sans modifier aucun fichier source**.
52
+ - `--out <path>` : chemin personnalisé du guide (défaut : `i18n-guide.md`)
53
+ - `--locale <locales>` : langues cibles si aucune config n'existe
54
+ - `--inject` : configure next.config, middleware.ts, i18n/routing.ts, i18n/request.ts et app/[locale]/ après extraction
55
+ - `--switcher` : injecte uniquement le Language Switcher flottant (sans `--inject`)
56
+ - `--no-module-scope` : exclut les strings dans les `const` module-scope de la détection et de la traduction
57
+ - Fonctionne sans `auto-i18n.config.json` (prompts interactifs en fallback)
58
+ - Le guide inclut : résumé, fichiers générés, exemples client/serveur, section module-scope, tableaux par fichier, référence des clés
59
+
60
+ - **Commande `extract sync`** : sous-commande de `extract` — rescanne le projet, intègre les nouvelles strings et synchronise les traductions **sans réécrire les fichiers source**. Même merge stable que `sync`.
61
+ - `--inject` : configure Next.js après la synchronisation
62
+ - `--switcher` : injecte uniquement le Language Switcher
63
+ - `--no-module-scope` : exclut les strings module-scope du scan et de la traduction
64
+
65
+ - **Détection des strings module-scope** : les strings dans des `const` à niveau module sont détectées, traduites dans le JSON, et signalées en CLI (fichier + ligne + clé). Le code source n'est pas réécrit (la fonction `t()` n'est accessible qu'à l'intérieur d'un composant).
66
+
67
+ - **Sortie CLI détaillée** : toutes les commandes affichent des informations enrichies (fichiers scannés, remplacements par fichier, clés nouvelles vs existantes, strings module-scope).
68
+
69
+ ### Fixed
70
+
71
+ - **Entités HTML DeepL** : `&apos;`, `&#39;`, `&#x27;`, `&quot;`, `&#34;` sont maintenant correctement restaurés — corrige l'affichage `d&apos;exception` au lieu de `d'exception`.
72
+ - **`sync` — stabilité des clés** : les clés existantes sont désormais préservées via `existingMessages` (merge stable). Plus de régénération depuis zéro.
73
+ - **`sync` — traduction toujours exécutée** : la synchronisation des traductions s'exécute même si le scan ne trouve aucune nouvelle string.
74
+ - **`extract` — clé API perdue** : lors du premier lancement sans config, la clé saisie interactivement était ignorée lors du check suivant — corrigé en la transmettant directement.
75
+ - **Tests `key-builder`** : limite de troncature corrigée de 40 à 60 dans les tests (correspondant à l'implémentation réelle).
76
+
77
+ ### Changed
78
+
79
+ - `generateMessages` accepte `existingMessages?: Record<string, string>` pour le merge incrémental stable.
80
+ - `GenerateResult` expose `newCount: number`.
81
+ - `RewriteResult` expose `moduleScopeStrings: UnrewrittenString[]` et `details: FileRewriteDetail[]`.
82
+ - `src/cli/doc-generator.ts` : nouveau module dédié à la génération du guide Markdown.
83
+
84
+ ## [0.3.0] - 2026-03-26
85
+
86
+ ### Added
87
+
88
+ - **`i18n/request.ts`** : fichier de configuration requis par next-intl pour les Server Components — genere automatiquement avec `getRequestConfig` et fallback sur la locale par defaut.
89
+ - **Structure `app/[locale]/`** : creation automatique du dossier dynamique requis par le App Router next-intl. Les pages existantes sont deplacees, un `[locale]/layout.tsx` est genere avec `NextIntlClientProvider` + `LanguageSwitcher`, et le root layout est simplifie en HTML shell pur.
90
+ - **`<html lang={locale}>`** : l'attribut `lang` du document HTML est desormais dynamique, refletant la locale active (accessibilite + SEO).
91
+ - **Detection Next.js 16** : si la version de Next.js installee est >= 16, l'injecteur genere `proxy.ts` au lieu de `middleware.ts` (convention Next.js 16+).
92
+
93
+ ### Fixed
94
+
95
+ - **Rewriter ne detruit plus `LanguageSwitcher.tsx`** : les fichiers generes par le package (`LanguageSwitcher.tsx`) sont exclus du scan et de la reecriture AST.
96
+ - **`LanguageSwitcher` dans le provider** : le composant est maintenant dans `<NextIntlClientProvider>` (via `[locale]/layout.tsx`), ce qui evite tout crash lie au contexte.
97
+ - **TypeScript readonly cast** : `routing.locales as string[]` corrige en `[...routing.locales] as string[]` pour eviter l'erreur de conversion de tuple readonly.
98
+ - **Config `ignore` transmis au scanner** : les patterns du champ `ignore` de `auto-i18n.config.json` (ex: `**/*.test.*`) sont maintenant passes a `scanProject` via `ignorePatterns`.
99
+ - **Scope de scan limite aux dossiers Next.js** : les fichiers `.mjs` ou `.ts` a la racine du projet ne sont plus scannes. Le scanner ne descend que dans `app/`, `src/`, `pages/`, `components/`, `lib/`, `hooks/`, `utils/`.
100
+ - **Dossiers `i18n/` et `messages/` exclus** : ces dossiers generes par le package sont ajoutes aux `DEFAULT_IGNORE_DIRS` internes du scanner.
101
+ - **Support glob patterns** dans `ignorePatterns` : les patterns `**/*.test.*` sont desormais correctement interpretes (conversion glob → RegExp).
102
+
103
+ ### Changed
104
+
105
+ - L'orchestrateur `injectAll()` ne modifie plus le root `layout.tsx` directement — la configuration next-intl passe exclusivement par `app/[locale]/layout.tsx`.
106
+ - `InjectAllResult` : remplacement de `layout` par `localeStructure` + ajout de `request`.
107
+
108
+ ## [0.2.0] - 2026-03-26
109
+
110
+ ### Added
111
+
112
+ - **Language Switcher** : composant flottant genere automatiquement et injecte dans le layout, permettant aux utilisateurs de changer de langue depuis le navigateur. Personnalisable (position, theme, couleur d'accent, taille).
113
+ - **Auto-install next-intl** : detection automatique du package manager (npm/yarn/pnpm) et installation de `next-intl` si absent.
114
+ - **Attribution** : tag "Made by Steven Koulo" integre au widget (requis par la licence).
115
+
116
+ ### Fixed
117
+
118
+ - **Scanner** : les template literals dans `className`, `style`, `id`, `href`, `src` et autres attributs non traduisibles ne sont plus extraits.
119
+ - **Rewriter** : les crashes AST sur les structures complexes (ternaires, expressions imbriquees) sont desormais absorbes gracieusement (try/catch).
120
+ - **Pipeline** : la reecriture de chaque fichier est isolee — un fichier en erreur n'arrete plus le reste du pipeline.
121
+ - **CLI** : l'etape d'injection (middleware, routing, layout) s'execute meme si la reecriture echoue partiellement.
122
+
123
+ ### Changed
124
+
125
+ - Mise a jour de vitest 1.6.x vers 4.1.x pour compatibilite Node.js 25.
126
+
127
+ ## [0.1.0] - 2026-03-26
128
+
129
+ ### Initial release
130
+
131
+ - **Scanner** : extraction AST des strings JSX, attributs et template literals
132
+ - **Generator** : generation des cles i18n et du fichier `messages/<locale>.json`
133
+ - **Translator** : traduction automatique via DeepL API (batch, incrementiel)
134
+ - **Rewriter** : reecriture des composants React (`t("cle")`, `useTranslations`, `getTranslations`)
135
+ - **Injector** : configuration automatique de Next.js (`layout.tsx`, `next.config`, `middleware.ts`, `i18n/routing.ts`)
136
+ - **CLI** : commandes `init`, `sync`, `add-locale`, `missing`
137
+ - Mode `--dry-run` pour preview sans modification
138
+ - Backups automatiques (`*.backup`)
139
+ - Support Server Components et Client Components
140
+ - Protection des placeholders lors de la traduction