i18nsmith 0.1.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 (213) hide show
  1. package/dist/commands/audit.d.ts +3 -0
  2. package/dist/commands/audit.d.ts.map +1 -0
  3. package/dist/commands/audit.js +180 -0
  4. package/dist/commands/audit.js.map +1 -0
  5. package/dist/commands/backup.d.ts +6 -0
  6. package/dist/commands/backup.d.ts.map +1 -0
  7. package/dist/commands/backup.js +85 -0
  8. package/dist/commands/backup.js.map +1 -0
  9. package/dist/commands/check.d.ts +3 -0
  10. package/dist/commands/check.d.ts.map +1 -0
  11. package/dist/commands/check.js +151 -0
  12. package/dist/commands/check.js.map +1 -0
  13. package/dist/commands/config.d.ts +3 -0
  14. package/dist/commands/config.d.ts.map +1 -0
  15. package/dist/commands/config.js +235 -0
  16. package/dist/commands/config.js.map +1 -0
  17. package/dist/commands/debug-patterns.d.ts +3 -0
  18. package/dist/commands/debug-patterns.d.ts.map +1 -0
  19. package/dist/commands/debug-patterns.js +192 -0
  20. package/dist/commands/debug-patterns.js.map +1 -0
  21. package/dist/commands/debug-patterns.test.d.ts +2 -0
  22. package/dist/commands/debug-patterns.test.d.ts.map +1 -0
  23. package/dist/commands/debug-patterns.test.js +109 -0
  24. package/dist/commands/debug-patterns.test.js.map +1 -0
  25. package/dist/commands/diagnose.d.ts +3 -0
  26. package/dist/commands/diagnose.d.ts.map +1 -0
  27. package/dist/commands/diagnose.js +117 -0
  28. package/dist/commands/diagnose.js.map +1 -0
  29. package/dist/commands/init.d.ts +8 -0
  30. package/dist/commands/init.d.ts.map +1 -0
  31. package/dist/commands/init.js +450 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/init.test.d.ts +2 -0
  34. package/dist/commands/init.test.d.ts.map +1 -0
  35. package/dist/commands/init.test.js +74 -0
  36. package/dist/commands/init.test.js.map +1 -0
  37. package/dist/commands/install-hooks.d.ts +3 -0
  38. package/dist/commands/install-hooks.d.ts.map +1 -0
  39. package/dist/commands/install-hooks.js +52 -0
  40. package/dist/commands/install-hooks.js.map +1 -0
  41. package/dist/commands/preflight.d.ts +7 -0
  42. package/dist/commands/preflight.d.ts.map +1 -0
  43. package/dist/commands/preflight.js +417 -0
  44. package/dist/commands/preflight.js.map +1 -0
  45. package/dist/commands/preflight.test.d.ts +5 -0
  46. package/dist/commands/preflight.test.d.ts.map +1 -0
  47. package/dist/commands/preflight.test.js +108 -0
  48. package/dist/commands/preflight.test.js.map +1 -0
  49. package/dist/commands/rename.d.ts +6 -0
  50. package/dist/commands/rename.d.ts.map +1 -0
  51. package/dist/commands/rename.js +204 -0
  52. package/dist/commands/rename.js.map +1 -0
  53. package/dist/commands/scaffold-adapter.d.ts +3 -0
  54. package/dist/commands/scaffold-adapter.d.ts.map +1 -0
  55. package/dist/commands/scaffold-adapter.js +204 -0
  56. package/dist/commands/scaffold-adapter.js.map +1 -0
  57. package/dist/commands/scaffold-adapter.test.d.ts +2 -0
  58. package/dist/commands/scaffold-adapter.test.d.ts.map +1 -0
  59. package/dist/commands/scaffold-adapter.test.js +102 -0
  60. package/dist/commands/scaffold-adapter.test.js.map +1 -0
  61. package/dist/commands/scan.d.ts +3 -0
  62. package/dist/commands/scan.d.ts.map +1 -0
  63. package/dist/commands/scan.js +93 -0
  64. package/dist/commands/scan.js.map +1 -0
  65. package/dist/commands/sync-seed.test.d.ts +2 -0
  66. package/dist/commands/sync-seed.test.d.ts.map +1 -0
  67. package/dist/commands/sync-seed.test.js +86 -0
  68. package/dist/commands/sync-seed.test.js.map +1 -0
  69. package/dist/commands/sync.d.ts +3 -0
  70. package/dist/commands/sync.d.ts.map +1 -0
  71. package/dist/commands/sync.js +590 -0
  72. package/dist/commands/sync.js.map +1 -0
  73. package/dist/commands/transform.d.ts +3 -0
  74. package/dist/commands/transform.d.ts.map +1 -0
  75. package/dist/commands/transform.js +114 -0
  76. package/dist/commands/transform.js.map +1 -0
  77. package/dist/commands/translate/csv-handler.d.ts +21 -0
  78. package/dist/commands/translate/csv-handler.d.ts.map +1 -0
  79. package/dist/commands/translate/csv-handler.js +270 -0
  80. package/dist/commands/translate/csv-handler.js.map +1 -0
  81. package/dist/commands/translate/executor.d.ts +31 -0
  82. package/dist/commands/translate/executor.d.ts.map +1 -0
  83. package/dist/commands/translate/executor.js +117 -0
  84. package/dist/commands/translate/executor.js.map +1 -0
  85. package/dist/commands/translate/index.d.ts +10 -0
  86. package/dist/commands/translate/index.d.ts.map +1 -0
  87. package/dist/commands/translate/index.js +170 -0
  88. package/dist/commands/translate/index.js.map +1 -0
  89. package/dist/commands/translate/reporter.d.ts +29 -0
  90. package/dist/commands/translate/reporter.d.ts.map +1 -0
  91. package/dist/commands/translate/reporter.js +103 -0
  92. package/dist/commands/translate/reporter.js.map +1 -0
  93. package/dist/commands/translate/types.d.ts +50 -0
  94. package/dist/commands/translate/types.d.ts.map +1 -0
  95. package/dist/commands/translate/types.js +5 -0
  96. package/dist/commands/translate/types.js.map +1 -0
  97. package/dist/commands/translate.d.ts +7 -0
  98. package/dist/commands/translate.d.ts.map +1 -0
  99. package/dist/commands/translate.js +7 -0
  100. package/dist/commands/translate.js.map +1 -0
  101. package/dist/commands/translate.test.d.ts +2 -0
  102. package/dist/commands/translate.test.d.ts.map +1 -0
  103. package/dist/commands/translate.test.js +118 -0
  104. package/dist/commands/translate.test.js.map +1 -0
  105. package/dist/e2e.test.d.ts +6 -0
  106. package/dist/e2e.test.d.ts.map +1 -0
  107. package/dist/e2e.test.js +376 -0
  108. package/dist/e2e.test.js.map +1 -0
  109. package/dist/index.d.ts +4 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +39 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/integration.test.d.ts +6 -0
  114. package/dist/integration.test.d.ts.map +1 -0
  115. package/dist/integration.test.js +320 -0
  116. package/dist/integration.test.js.map +1 -0
  117. package/dist/utils/diagnostics-exit.d.ts +12 -0
  118. package/dist/utils/diagnostics-exit.d.ts.map +1 -0
  119. package/dist/utils/diagnostics-exit.js +49 -0
  120. package/dist/utils/diagnostics-exit.js.map +1 -0
  121. package/dist/utils/diagnostics-exit.test.d.ts +2 -0
  122. package/dist/utils/diagnostics-exit.test.d.ts.map +1 -0
  123. package/dist/utils/diagnostics-exit.test.js +40 -0
  124. package/dist/utils/diagnostics-exit.test.js.map +1 -0
  125. package/dist/utils/diff-utils.d.ts +4 -0
  126. package/dist/utils/diff-utils.d.ts.map +1 -0
  127. package/dist/utils/diff-utils.js +30 -0
  128. package/dist/utils/diff-utils.js.map +1 -0
  129. package/dist/utils/diff-utils.test.d.ts +2 -0
  130. package/dist/utils/diff-utils.test.d.ts.map +1 -0
  131. package/dist/utils/diff-utils.test.js +30 -0
  132. package/dist/utils/diff-utils.test.js.map +1 -0
  133. package/dist/utils/exit-codes.d.ts +142 -0
  134. package/dist/utils/exit-codes.d.ts.map +1 -0
  135. package/dist/utils/exit-codes.js +168 -0
  136. package/dist/utils/exit-codes.js.map +1 -0
  137. package/dist/utils/package-manager.d.ts +4 -0
  138. package/dist/utils/package-manager.d.ts.map +1 -0
  139. package/dist/utils/package-manager.js +40 -0
  140. package/dist/utils/package-manager.js.map +1 -0
  141. package/dist/utils/pkg.d.ts +3 -0
  142. package/dist/utils/pkg.d.ts.map +1 -0
  143. package/dist/utils/pkg.js +24 -0
  144. package/dist/utils/pkg.js.map +1 -0
  145. package/dist/utils/provider-injector.d.ts +36 -0
  146. package/dist/utils/provider-injector.d.ts.map +1 -0
  147. package/dist/utils/provider-injector.js +223 -0
  148. package/dist/utils/provider-injector.js.map +1 -0
  149. package/dist/utils/provider-injector.test.d.ts +2 -0
  150. package/dist/utils/provider-injector.test.d.ts.map +1 -0
  151. package/dist/utils/provider-injector.test.js +67 -0
  152. package/dist/utils/provider-injector.test.js.map +1 -0
  153. package/dist/utils/scaffold.d.ts +20 -0
  154. package/dist/utils/scaffold.d.ts.map +1 -0
  155. package/dist/utils/scaffold.js +197 -0
  156. package/dist/utils/scaffold.js.map +1 -0
  157. package/package.json +35 -0
  158. package/src/commands/audit.ts +234 -0
  159. package/src/commands/backup.ts +96 -0
  160. package/src/commands/check.ts +191 -0
  161. package/src/commands/config.ts +263 -0
  162. package/src/commands/debug-patterns.test.ts +134 -0
  163. package/src/commands/debug-patterns.ts +257 -0
  164. package/src/commands/diagnose.ts +136 -0
  165. package/src/commands/init.test.ts +82 -0
  166. package/src/commands/init.ts +536 -0
  167. package/src/commands/install-hooks.ts +66 -0
  168. package/src/commands/preflight.test.ts +139 -0
  169. package/src/commands/preflight.ts +488 -0
  170. package/src/commands/rename.ts +264 -0
  171. package/src/commands/scaffold-adapter.test.ts +110 -0
  172. package/src/commands/scaffold-adapter.ts +250 -0
  173. package/src/commands/scan.ts +125 -0
  174. package/src/commands/sync-seed.test.ts +116 -0
  175. package/src/commands/sync.ts +736 -0
  176. package/src/commands/transform.ts +151 -0
  177. package/src/commands/translate/README.md +75 -0
  178. package/src/commands/translate/csv-handler.ts +301 -0
  179. package/src/commands/translate/executor.ts +188 -0
  180. package/src/commands/translate/index.ts +220 -0
  181. package/src/commands/translate/reporter.ts +138 -0
  182. package/src/commands/translate/types.ts +56 -0
  183. package/src/commands/translate.test.ts +173 -0
  184. package/src/commands/translate.ts +6 -0
  185. package/src/e2e.test.ts +479 -0
  186. package/src/fixtures/README.md +61 -0
  187. package/src/fixtures/basic-react/i18n.config.json +15 -0
  188. package/src/fixtures/basic-react/locales/de.json +8 -0
  189. package/src/fixtures/basic-react/locales/en.json +8 -0
  190. package/src/fixtures/basic-react/locales/fr.json +8 -0
  191. package/src/fixtures/basic-react/src/App.tsx +15 -0
  192. package/src/fixtures/basic-react/src/Messages.tsx +12 -0
  193. package/src/fixtures/nested-locales/i18n.config.json +9 -0
  194. package/src/fixtures/nested-locales/locales/en.json +23 -0
  195. package/src/fixtures/nested-locales/locales/fr.json +23 -0
  196. package/src/fixtures/nested-locales/src/HomePage.tsx +13 -0
  197. package/src/fixtures/suspicious-keys/i18n.config.json +9 -0
  198. package/src/fixtures/suspicious-keys/locales/en.json +11 -0
  199. package/src/fixtures/suspicious-keys/locales/fr.json +11 -0
  200. package/src/fixtures/suspicious-keys/src/BadKeys.tsx +19 -0
  201. package/src/index.ts +43 -0
  202. package/src/integration.test.ts +438 -0
  203. package/src/utils/diagnostics-exit.test.ts +47 -0
  204. package/src/utils/diagnostics-exit.ts +63 -0
  205. package/src/utils/diff-utils.test.ts +36 -0
  206. package/src/utils/diff-utils.ts +42 -0
  207. package/src/utils/exit-codes.ts +201 -0
  208. package/src/utils/package-manager.ts +44 -0
  209. package/src/utils/pkg.ts +23 -0
  210. package/src/utils/provider-injector.test.ts +79 -0
  211. package/src/utils/provider-injector.ts +315 -0
  212. package/src/utils/scaffold.ts +240 -0
  213. package/tsconfig.json +17 -0
@@ -0,0 +1,376 @@
1
+ /**
2
+ * E2E Tests using fixture projects
3
+ * These tests run against pre-configured fixture projects to test real-world scenarios
4
+ */
5
+ import { describe, it, expect, beforeEach, afterEach, beforeAll } from 'vitest';
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ import os from 'os';
9
+ import { spawnSync } from 'child_process';
10
+ import { fileURLToPath } from 'url';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+ // Get paths
14
+ const CLI_PATH = path.resolve(__dirname, '../dist/index.js');
15
+ const FIXTURES_DIR = path.resolve(__dirname, './fixtures');
16
+ // Helper to run CLI commands
17
+ function runCli(args, options = {}) {
18
+ const result = spawnSync('node', [CLI_PATH, ...args], {
19
+ cwd: options.cwd ?? process.cwd(),
20
+ encoding: 'utf8',
21
+ timeout: 30000,
22
+ env: {
23
+ ...process.env,
24
+ CI: 'true',
25
+ NO_COLOR: '1',
26
+ FORCE_COLOR: '0',
27
+ },
28
+ });
29
+ const stdout = result.stdout ?? '';
30
+ const stderr = result.stderr ?? '';
31
+ return {
32
+ stdout,
33
+ stderr,
34
+ output: stdout + stderr,
35
+ exitCode: result.status ?? 1,
36
+ };
37
+ }
38
+ // Helper to copy fixture to temp directory
39
+ async function setupFixture(fixtureName) {
40
+ const fixtureSource = path.join(FIXTURES_DIR, fixtureName);
41
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), `i18nsmith-e2e-${fixtureName}-`));
42
+ await copyDir(fixtureSource, tmpDir);
43
+ return tmpDir;
44
+ }
45
+ // Helper to recursively copy directory
46
+ async function copyDir(src, dest) {
47
+ await fs.mkdir(dest, { recursive: true });
48
+ const entries = await fs.readdir(src, { withFileTypes: true });
49
+ for (const entry of entries) {
50
+ const srcPath = path.join(src, entry.name);
51
+ const destPath = path.join(dest, entry.name);
52
+ if (entry.isDirectory()) {
53
+ await copyDir(srcPath, destPath);
54
+ }
55
+ else {
56
+ await fs.copyFile(srcPath, destPath);
57
+ }
58
+ }
59
+ }
60
+ // Helper to cleanup temp directory
61
+ async function cleanupFixture(fixtureDir) {
62
+ await fs.rm(fixtureDir, { recursive: true, force: true });
63
+ }
64
+ // Helper to extract JSON from output
65
+ function extractJson(output) {
66
+ const jsonMatch = output.match(/\{[\s\S]*\}/);
67
+ if (!jsonMatch) {
68
+ throw new Error(`No JSON found in output: ${output.slice(0, 200)}...`);
69
+ }
70
+ return JSON.parse(jsonMatch[0]);
71
+ }
72
+ beforeAll(() => {
73
+ const cliRoot = path.resolve(__dirname, '..');
74
+ const result = spawnSync('pnpm', ['build'], {
75
+ cwd: cliRoot,
76
+ stdio: 'inherit',
77
+ env: { ...process.env },
78
+ });
79
+ if (result.status !== 0) {
80
+ throw new Error('Failed to build CLI before running E2E tests');
81
+ }
82
+ });
83
+ describe('E2E Fixture Tests', () => {
84
+ describe('basic-react fixture', () => {
85
+ let fixtureDir;
86
+ beforeEach(async () => {
87
+ fixtureDir = await setupFixture('basic-react');
88
+ });
89
+ afterEach(async () => {
90
+ await cleanupFixture(fixtureDir);
91
+ });
92
+ it('should run preflight successfully', () => {
93
+ const result = runCli(['preflight'], { cwd: fixtureDir });
94
+ expect(result.output).toContain('Config File');
95
+ expect(result.output).toContain('pass');
96
+ });
97
+ it('should scan for translation references', () => {
98
+ const result = runCli(['scan'], { cwd: fixtureDir });
99
+ expect(result.exitCode).toBe(0);
100
+ expect(result.output).toContain('Scanned');
101
+ expect(result.output).toContain('candidate');
102
+ });
103
+ it('should check locale files without errors', () => {
104
+ const result = runCli(['check'], { cwd: fixtureDir });
105
+ expect(result.exitCode).toBe(0);
106
+ expect(result.output).toContain('Locales directory');
107
+ });
108
+ it('should run sync in dry-run mode by default', () => {
109
+ const result = runCli(['sync'], { cwd: fixtureDir });
110
+ expect(result.output).toContain('DRY RUN');
111
+ });
112
+ it('should output scan JSON when requested', () => {
113
+ const result = runCli(['scan', '--json'], { cwd: fixtureDir });
114
+ const parsed = extractJson(result.stdout);
115
+ expect(parsed).toHaveProperty('filesScanned');
116
+ expect(parsed).toHaveProperty('candidates');
117
+ expect(typeof parsed.filesScanned).toBe('number');
118
+ });
119
+ it('should output check JSON when requested', () => {
120
+ const result = runCli(['check', '--json'], { cwd: fixtureDir });
121
+ const parsed = extractJson(result.stdout);
122
+ expect(parsed).toHaveProperty('diagnostics');
123
+ });
124
+ });
125
+ describe('suspicious-keys fixture', () => {
126
+ let fixtureDir;
127
+ beforeEach(async () => {
128
+ fixtureDir = await setupFixture('suspicious-keys');
129
+ });
130
+ afterEach(async () => {
131
+ await cleanupFixture(fixtureDir);
132
+ });
133
+ it('should detect suspicious keys in audit', () => {
134
+ const result = runCli(['audit'], { cwd: fixtureDir });
135
+ // Should find suspicious patterns
136
+ expect(result.output).toContain('Suspicious');
137
+ });
138
+ it('should fail with --strict when suspicious keys exist', () => {
139
+ const result = runCli(['sync', '--strict'], { cwd: fixtureDir });
140
+ // Should fail due to suspicious keys
141
+ expect(result.exitCode).not.toBe(0);
142
+ });
143
+ it('should pass with --strict when no suspicious patterns', async () => {
144
+ // Remove suspicious keys from en.json, leaving only good ones
145
+ const localeFile = path.join(fixtureDir, 'locales', 'en.json');
146
+ const cleanLocale = {
147
+ 'proper.namespaced.key': 'This is a properly namespaced key',
148
+ 'buttons.submit': 'Submit',
149
+ 'common.title': 'Application Title'
150
+ };
151
+ await fs.writeFile(localeFile, JSON.stringify(cleanLocale, null, 2));
152
+ // Also update fr.json
153
+ const frLocaleFile = path.join(fixtureDir, 'locales', 'fr.json');
154
+ const cleanFrLocale = {
155
+ 'proper.namespaced.key': 'Ceci est une clé correctement nommée',
156
+ 'buttons.submit': 'Soumettre',
157
+ 'common.title': 'Titre de l\'application'
158
+ };
159
+ await fs.writeFile(frLocaleFile, JSON.stringify(cleanFrLocale, null, 2));
160
+ const result = runCli(['sync', '--strict'], { cwd: fixtureDir });
161
+ // The suspicious keys in source files may still trigger warnings
162
+ // but the locale files themselves should be clean
163
+ expect(result.output).toContain('Scanned');
164
+ });
165
+ it('should auto-rename suspicious keys when --write is provided', async () => {
166
+ const result = runCli([
167
+ 'sync',
168
+ '--auto-rename-suspicious',
169
+ '--write',
170
+ '--rename-map-file',
171
+ 'auto-rename-map.txt',
172
+ ], { cwd: fixtureDir });
173
+ expect(result.exitCode).toBe(0);
174
+ expect(result.output).toContain('Applying safe rename proposals');
175
+ const enLocalePath = path.join(fixtureDir, 'locales', 'en.json');
176
+ const frLocalePath = path.join(fixtureDir, 'locales', 'fr.json');
177
+ const enLocale = JSON.parse(await fs.readFile(enLocalePath, 'utf8'));
178
+ const frLocale = JSON.parse(await fs.readFile(frLocalePath, 'utf8'));
179
+ expect(enLocale).toHaveProperty('common.hello-world');
180
+ expect(enLocale).not.toHaveProperty('Hello World');
181
+ expect(frLocale).toHaveProperty('common.hello-world');
182
+ const sourceFile = await fs.readFile(path.join(fixtureDir, 'src', 'BadKeys.tsx'), 'utf8');
183
+ expect(sourceFile).toContain("t('common.hello-world')");
184
+ expect(sourceFile).not.toContain("t('Hello World')");
185
+ const mapPath = path.join(fixtureDir, 'auto-rename-map.txt');
186
+ const mapContents = await fs.readFile(mapPath, 'utf8');
187
+ expect(mapContents).toContain('"Hello World" = "common.hello-world"');
188
+ });
189
+ });
190
+ describe('nested-locales fixture', () => {
191
+ let fixtureDir;
192
+ beforeEach(async () => {
193
+ fixtureDir = await setupFixture('nested-locales');
194
+ });
195
+ afterEach(async () => {
196
+ await cleanupFixture(fixtureDir);
197
+ });
198
+ it('should handle nested JSON structure', () => {
199
+ const result = runCli(['check'], { cwd: fixtureDir });
200
+ expect(result.exitCode).toBe(0);
201
+ expect(result.output).toContain('Locales directory');
202
+ });
203
+ it('should scan references with dot-notation keys', () => {
204
+ const result = runCli(['sync'], { cwd: fixtureDir });
205
+ expect(result.output).toContain('reference');
206
+ });
207
+ it('should output sync JSON with nested locale data', () => {
208
+ const result = runCli(['sync', '--json'], { cwd: fixtureDir });
209
+ const parsed = extractJson(result.stdout);
210
+ expect(parsed).toHaveProperty('references');
211
+ expect(Array.isArray(parsed.references)).toBe(true);
212
+ });
213
+ });
214
+ describe('backup and restore workflow', () => {
215
+ let fixtureDir;
216
+ beforeEach(async () => {
217
+ fixtureDir = await setupFixture('basic-react');
218
+ });
219
+ afterEach(async () => {
220
+ await cleanupFixture(fixtureDir);
221
+ });
222
+ it('should create backup when writing with prune', async () => {
223
+ // Add an unused key to locales
224
+ const localeFile = path.join(fixtureDir, 'locales', 'en.json');
225
+ const locale = JSON.parse(await fs.readFile(localeFile, 'utf8'));
226
+ locale['unused.key.for.testing'] = 'Unused value';
227
+ await fs.writeFile(localeFile, JSON.stringify(locale, null, 2));
228
+ // Run sync with --write --prune --yes (skips confirmation)
229
+ const result = runCli(['sync', '--write', '--prune', '--yes'], { cwd: fixtureDir });
230
+ // Should mention backup (either text or emoji)
231
+ const mentionsBackup = result.output.includes('backup') || result.output.includes('📦');
232
+ expect(mentionsBackup).toBe(true);
233
+ });
234
+ it('should list backups after creating one', async () => {
235
+ // Add an unused key to locales
236
+ const localeFile = path.join(fixtureDir, 'locales', 'en.json');
237
+ const locale = JSON.parse(await fs.readFile(localeFile, 'utf8'));
238
+ locale['unused.key.for.testing'] = 'Unused value';
239
+ await fs.writeFile(localeFile, JSON.stringify(locale, null, 2));
240
+ // Create a backup
241
+ runCli(['sync', '--write', '--prune', '--yes'], { cwd: fixtureDir });
242
+ // List backups
243
+ const listResult = runCli(['backup-list'], { cwd: fixtureDir });
244
+ // Should find the backup or show no backups message
245
+ expect(listResult.output).toMatch(/backup|No backups found/i);
246
+ });
247
+ });
248
+ describe('dry-run default behavior', () => {
249
+ let fixtureDir;
250
+ beforeEach(async () => {
251
+ fixtureDir = await setupFixture('basic-react');
252
+ });
253
+ afterEach(async () => {
254
+ await cleanupFixture(fixtureDir);
255
+ });
256
+ it('sync should not modify files by default', async () => {
257
+ // Get original content
258
+ const localeFile = path.join(fixtureDir, 'locales', 'en.json');
259
+ const originalContent = await fs.readFile(localeFile, 'utf8');
260
+ // Run sync without --write
261
+ runCli(['sync'], { cwd: fixtureDir });
262
+ // Content should be unchanged
263
+ const afterContent = await fs.readFile(localeFile, 'utf8');
264
+ expect(afterContent).toBe(originalContent);
265
+ });
266
+ it('transform should not modify files by default', async () => {
267
+ // Get original content
268
+ const sourceFile = path.join(fixtureDir, 'src', 'App.tsx');
269
+ const originalContent = await fs.readFile(sourceFile, 'utf8');
270
+ // Run transform without --write
271
+ runCli(['transform'], { cwd: fixtureDir });
272
+ // Content should be unchanged
273
+ const afterContent = await fs.readFile(sourceFile, 'utf8');
274
+ expect(afterContent).toBe(originalContent);
275
+ });
276
+ });
277
+ describe('--assume flag for dynamic keys', () => {
278
+ let fixtureDir;
279
+ beforeEach(async () => {
280
+ fixtureDir = await setupFixture('basic-react');
281
+ });
282
+ afterEach(async () => {
283
+ await cleanupFixture(fixtureDir);
284
+ });
285
+ it('should accept assumed keys via --assume flag', async () => {
286
+ // Add keys to locale that exist but might be flagged as unused
287
+ const localeFile = path.join(fixtureDir, 'locales', 'en.json');
288
+ const locale = JSON.parse(await fs.readFile(localeFile, 'utf8'));
289
+ locale['dynamic.runtime.key'] = 'Dynamic value loaded at runtime';
290
+ await fs.writeFile(localeFile, JSON.stringify(locale, null, 2));
291
+ // Run sync without --assume - key should show as unused
292
+ const resultWithoutAssume = runCli(['sync', '--json'], { cwd: fixtureDir });
293
+ const parsedWithout = extractJson(resultWithoutAssume.stdout);
294
+ expect(parsedWithout.unusedKeys.some(k => k.key === 'dynamic.runtime.key')).toBe(true);
295
+ // Run sync with --assume - key should NOT show as unused
296
+ const resultWithAssume = runCli(['sync', '--json', '--assume', 'dynamic.runtime.key'], { cwd: fixtureDir });
297
+ const parsedWith = extractJson(resultWithAssume.stdout);
298
+ expect(parsedWith.assumedKeys).toContain('dynamic.runtime.key');
299
+ expect(parsedWith.unusedKeys.some(k => k.key === 'dynamic.runtime.key')).toBe(false);
300
+ });
301
+ it('should accept multiple assumed keys', async () => {
302
+ // Add keys to locale
303
+ const localeFile = path.join(fixtureDir, 'locales', 'en.json');
304
+ const locale = JSON.parse(await fs.readFile(localeFile, 'utf8'));
305
+ locale['dynamic.key.one'] = 'First dynamic key';
306
+ locale['dynamic.key.two'] = 'Second dynamic key';
307
+ await fs.writeFile(localeFile, JSON.stringify(locale, null, 2));
308
+ // Run sync with multiple --assume values
309
+ const result = runCli(['sync', '--json', '--assume', 'dynamic.key.one,dynamic.key.two'], { cwd: fixtureDir });
310
+ const parsed = extractJson(result.stdout);
311
+ expect(parsed.assumedKeys).toContain('dynamic.key.one');
312
+ expect(parsed.assumedKeys).toContain('dynamic.key.two');
313
+ });
314
+ });
315
+ describe('--invalidate-cache flag', () => {
316
+ let fixtureDir;
317
+ beforeEach(async () => {
318
+ fixtureDir = await setupFixture('basic-react');
319
+ });
320
+ afterEach(async () => {
321
+ await cleanupFixture(fixtureDir);
322
+ });
323
+ it('should accept --invalidate-cache flag on sync', () => {
324
+ const result = runCli(['sync', '--invalidate-cache'], { cwd: fixtureDir });
325
+ expect(result.exitCode).toBe(0);
326
+ expect(result.output).toContain('Scanned');
327
+ });
328
+ it('should accept --invalidate-cache flag on check', () => {
329
+ const result = runCli(['check', '--invalidate-cache'], { cwd: fixtureDir });
330
+ expect(result.exitCode).toBe(0);
331
+ expect(result.output).toContain('Locales directory');
332
+ });
333
+ });
334
+ describe('rename-keys bulk operation', () => {
335
+ let fixtureDir;
336
+ beforeEach(async () => {
337
+ fixtureDir = await setupFixture('basic-react');
338
+ });
339
+ afterEach(async () => {
340
+ await cleanupFixture(fixtureDir);
341
+ });
342
+ it('should perform bulk rename with mapping file', async () => {
343
+ // Create a mapping file
344
+ const mappingFile = path.join(fixtureDir, 'rename-map.json');
345
+ const mapping = {
346
+ 'common.welcome': 'home.greeting',
347
+ 'common.logout': 'auth.logout',
348
+ };
349
+ await fs.writeFile(mappingFile, JSON.stringify(mapping, null, 2));
350
+ // Run rename-keys with the mapping
351
+ const result = runCli(['rename-keys', '--map', 'rename-map.json'], { cwd: fixtureDir });
352
+ expect(result.output).toContain('DRY RUN');
353
+ // Should process the mappings (even if no actual references exist in fixture)
354
+ expect(result.output).toMatch(/Updated \d+ occurrence/i);
355
+ });
356
+ it('should accept array format mapping file', async () => {
357
+ // Create a mapping file with array format
358
+ const mappingFile = path.join(fixtureDir, 'rename-map.json');
359
+ const mapping = [
360
+ { from: 'old.key.one', to: 'new.key.one' },
361
+ { from: 'old.key.two', to: 'new.key.two' },
362
+ ];
363
+ await fs.writeFile(mappingFile, JSON.stringify(mapping, null, 2));
364
+ // Run rename-keys with the mapping
365
+ const result = runCli(['rename-keys', '--map', 'rename-map.json'], { cwd: fixtureDir });
366
+ expect(result.exitCode).toBe(0);
367
+ expect(result.output).toContain('DRY RUN');
368
+ });
369
+ it('should error on missing mapping file', () => {
370
+ const result = runCli(['rename-keys', '--map', 'nonexistent.json'], { cwd: fixtureDir });
371
+ expect(result.exitCode).not.toBe(0);
372
+ expect(result.output).toContain('not found');
373
+ });
374
+ });
375
+ });
376
+ //# sourceMappingURL=e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../src/e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ export declare const program: Command;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,OAAO,SAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { registerInit } from './commands/init.js';
4
+ import { registerScaffoldAdapter } from './commands/scaffold-adapter.js';
5
+ import { registerTranslate } from './commands/translate.js';
6
+ import { registerPreflight } from './commands/preflight.js';
7
+ import { registerDebugPatterns } from './commands/debug-patterns.js';
8
+ import { registerDiagnose } from './commands/diagnose.js';
9
+ import { registerAudit } from './commands/audit.js';
10
+ import { registerCheck } from './commands/check.js';
11
+ import { registerScan } from './commands/scan.js';
12
+ import { registerTransform } from './commands/transform.js';
13
+ import { registerSync } from './commands/sync.js';
14
+ import { registerBackup } from './commands/backup.js';
15
+ import { registerRename } from './commands/rename.js';
16
+ import { registerInstallHooks } from './commands/install-hooks.js';
17
+ import { registerConfig } from './commands/config.js';
18
+ export const program = new Command();
19
+ program
20
+ .name('i18nsmith')
21
+ .description('Universal Automated i18n Library')
22
+ .version('0.1.0');
23
+ registerInit(program);
24
+ registerScaffoldAdapter(program);
25
+ registerTranslate(program);
26
+ registerPreflight(program);
27
+ registerDebugPatterns(program);
28
+ registerDiagnose(program);
29
+ registerAudit(program);
30
+ registerCheck(program);
31
+ registerScan(program);
32
+ registerTransform(program);
33
+ registerSync(program);
34
+ registerBackup(program);
35
+ registerRename(program);
36
+ registerInstallHooks(program);
37
+ registerConfig(program);
38
+ program.parse();
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,cAAc,CAAC,OAAO,CAAC,CAAC;AAGxB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Integration tests for CLI commands
3
+ * These tests run the actual CLI commands against real file systems
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../src/integration.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}