@translation-cms/sync 1.2.81 → 1.2.83

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.
package/README.md CHANGED
@@ -15,26 +15,62 @@ Choose the approach that fits your workflow:
15
15
 
16
16
  ### Method 1: Next.js Plugin (Automatic)
17
17
 
18
- Edit `next.config.ts`:
18
+ The `init` command automatically generates your `next.config.ts`. It looks like
19
+ this:
19
20
 
20
21
  ```ts
21
- import withTranslationsCMS from '@translation-cms/sync/next';
22
+ import type { NextConfig } from 'next';
23
+ import {
24
+ PHASE_DEVELOPMENT_SERVER,
25
+ PHASE_PRODUCTION_BUILD,
26
+ } from 'next/constants';
27
+ import {
28
+ syncTranslations,
29
+ pullTranslations,
30
+ watchTranslations,
31
+ } from '@translation-cms/sync/api';
22
32
 
23
- export default withTranslationsCMS(
24
- {
25
- // your Next.js config
26
- },
27
- {
28
- pullOnBuild: true, // auto pull on `next build`
29
- pullOnDev: true, // auto pull on `next dev` startup
30
- watchInterval: 300000, // poll CMS for updates every 5min in dev (0 to disable)
33
+ // Mirror your tsconfig.json paths so the scanner can resolve @/ alias imports
34
+ const pathMappings: Record<string, string[]> = {
35
+ '@/*': ['src/*'],
36
+ };
37
+
38
+ const pluralSuffixes = ['_zero', '_one', '_two', '_few', '_many', '_other'];
39
+
40
+ export default async function config(phase: string): Promise<NextConfig> {
41
+ if (phase === PHASE_DEVELOPMENT_SERVER) {
42
+ await syncTranslations({
43
+ projectRoot: '.',
44
+ pathMappings,
45
+ verbose: true,
46
+ pluralSuffixes,
47
+ });
48
+ await pullTranslations({ projectRoot: '.', verbose: true });
49
+ watchTranslations({ projectRoot: '.', interval: 300000 });
31
50
  }
32
- );
51
+
52
+ if (phase === PHASE_PRODUCTION_BUILD) {
53
+ await syncTranslations({
54
+ projectRoot: '.',
55
+ pathMappings,
56
+ pluralSuffixes,
57
+ });
58
+ await pullTranslations({ projectRoot: '.' });
59
+ }
60
+
61
+ return {
62
+ // Your Next.js configuration goes here
63
+ // Example:
64
+ // images: { remotePatterns: [...] },
65
+ // redirects: async () => [...],
66
+ // rewrites: async () => [...],
67
+ };
68
+ }
33
69
  ```
34
70
 
35
- Your translations sync automatically and in dev mode, the JSON files are
36
- re-pulled automatically whenever you publish new translations in the CMS. No
37
- extra commands needed.
71
+ Your translations sync automatically during development and build and the JSON
72
+ files are re-pulled automatically whenever you publish new translations in the
73
+ CMS.
38
74
 
39
75
  ### Method 2: CLI (Manual)
40
76
 
@@ -54,7 +90,8 @@ pnpm sync-translations init
54
90
 
55
91
  ### Method 3: Programmatic API
56
92
 
57
- Use in scripts, build tools, or a custom `next.config.ts`:
93
+ Use in scripts, build tools, or a custom `next.config.ts`. This is the full API
94
+ — all functions available:
58
95
 
59
96
  ```ts
60
97
  import type { NextConfig } from 'next';
@@ -66,30 +103,47 @@ import {
66
103
  syncTranslations,
67
104
  pullTranslations,
68
105
  watchTranslations,
106
+ syncAndPull,
69
107
  } from '@translation-cms/sync/api';
70
108
 
71
- const pathMappings = { '@/*': ['src/*'] }; // mirror your tsconfig paths
109
+ // Extract from tsconfig.json to resolve alias imports (@/*, @tellr/*, etc.)
110
+ const pathMappings: Record<string, string[]> = {
111
+ '@/*': ['src/*'],
112
+ '@components': ['src/components'],
113
+ // Add more as needed from your tsconfig.json
114
+ };
115
+
116
+ // Register plural forms for keys like t('ns:key_one'), t('ns:key_other')
117
+ const pluralSuffixes = ['_zero', '_one', '_two', '_few', '_many', '_other'];
72
118
 
73
119
  export default async function config(phase: string): Promise<NextConfig> {
74
120
  if (phase === PHASE_DEVELOPMENT_SERVER) {
75
- // Scan keys and upload, then pull translations
121
+ // Scan code and upload new/changed keys
76
122
  await syncTranslations({
77
123
  projectRoot: '.',
78
124
  pathMappings,
125
+ pluralSuffixes,
79
126
  verbose: true,
80
127
  });
128
+ // Download translations from CMS
81
129
  await pullTranslations({ projectRoot: '.', verbose: true });
82
- // Poll the CMS in the background re-pulls whenever you publish
83
- watchTranslations({ projectRoot: '.' });
130
+ // Poll CMS every 5min for new translations (non-blocking)
131
+ watchTranslations({ projectRoot: '.', interval: 300000 });
84
132
  }
85
133
 
86
134
  if (phase === PHASE_PRODUCTION_BUILD) {
87
- await syncTranslations({ projectRoot: '.', pathMappings });
88
- await pullTranslations({ projectRoot: '.' });
135
+ // One-shot: sync + pull (no watch in production)
136
+ await syncAndPull({
137
+ projectRoot: '.',
138
+ pathMappings,
139
+ pluralSuffixes,
140
+ });
89
141
  }
90
142
 
91
143
  return {
92
- // ... your Next.js config
144
+ // Your Next.js configuration
145
+ // images: { remotePatterns: [...] },
146
+ // redirects: async () => [...],
93
147
  };
94
148
  }
95
149
  ```
@@ -231,33 +285,38 @@ Plus the peer dependencies:
231
285
  pnpm add i18next react-i18next i18next-resources-to-backend
232
286
  ```
233
287
 
234
- ## Step 3: Set Up CMS Credentials
288
+ ## Step 3: Automatic Setup (Recommended)
235
289
 
236
- Create `.env.local` in your project root:
290
+ Run the interactive setup wizard:
237
291
 
238
292
  ```bash
239
- NEXT_PUBLIC_CMS_URL=https://cms.example.com
240
- NEXT_PUBLIC_CMS_PROJECT_ID=your-project-id
241
- CMS_SYNC_API_KEY=your-jwt-api-key
293
+ pnpm sync-translations init
242
294
  ```
243
295
 
244
- The `CMS_SYNC_API_KEY` is a **JWT token**. You can find it in the CMS under
245
- **Project Settings → Environments → your environment → API Key**. If the key
246
- there still looks like a UUID, use "Regenerate" to generate a JWT.
296
+ This will ask for your CMS credentials and automatically:
247
297
 
248
- > **Note:** use `CMS_SYNC_API_KEY` (without `NEXT_PUBLIC_`). This prevents the
249
- > JWT from accidentally ending up in the browser. The old name
250
- > `NEXT_PUBLIC_CMS_ANON_KEY` still works as a fallback, but is discouraged.
298
+ - Create/update `.env.local` with your CMS settings:
299
+ ```
300
+ NEXT_PUBLIC_CMS_URL=https://cms.example.com
301
+ NEXT_PUBLIC_CMS_PROJECT_ID=your-project-id
302
+ CMS_SYNC_API_KEY=your-jwt-api-key
303
+ ```
304
+ - Generate `.translationsrc.json` with output directory and settings
305
+ - Create the i18n directory structure
251
306
 
252
- ## Step 4: Automatic Setup (Recommended)
307
+ ### Getting Your API Key
253
308
 
254
- Run the interactive setup wizard:
309
+ The `CMS_SYNC_API_KEY` is a **JWT token**. Find it in the CMS under: **Project
310
+ Settings → Environments → your environment → API Key**
255
311
 
256
- ```bash
257
- pnpm sync-translations init
258
- ```
312
+ If it still looks like a UUID, use "Regenerate" to generate a JWT.
259
313
 
260
- This automatically creates:
314
+ > **Note:** The key is stored in `.env.local` (not committed to git) for
315
+ > security.
316
+
317
+ ### Generated Files
318
+
319
+ The init command creates:
261
320
 
262
321
  ```
263
322
  src/lib/i18n/
@@ -271,21 +330,20 @@ src/lib/i18n/
271
330
  └── nl.json # Dutch (empty, filled by pull)
272
331
  ```
273
332
 
274
- Also `.translationsrc.json` is generated:
333
+ And `.translationsrc.json`:
275
334
 
276
335
  ```json
277
336
  {
278
337
  "outputDir": "./src/lib/i18n/dictionaries",
279
338
  "pullTtlMs": 300000,
280
- "excludedDirs": ["e2e", "node_modules", "fixtures"],
281
- "routeParams": {}
339
+ "excludedDirs": ["e2e", "node_modules", "fixtures"]
282
340
  }
283
341
  ```
284
342
 
285
343
  **Note:** `routeParams` can stay empty! The scanner automatically generates
286
344
  sensible defaults for all dynamic routes.
287
345
 
288
- ## Step 5: First Sync — Upload Keys
346
+ ## Step 4: First Sync — Upload Keys
289
347
 
290
348
  Scan your code and upload detected keys to the CMS:
291
349
 
@@ -306,7 +364,7 @@ Check in the CMS if your keys appeared.
306
364
  — this is normal! The keys were just uploaded but don't have translations yet.
307
365
  Go to your CMS, fill in translations, then run `pull` again.
308
366
 
309
- ## Step 5b: Add Translations in CMS
367
+ ## Step 5: Add Translations in CMS
310
368
 
311
369
  1. Open your Translations CMS project
312
370
  2. Your keys are now listed (without translations)
@@ -394,7 +452,7 @@ t('auth:login.email');
394
452
  t('payments:amount'); // namespace not added
395
453
  ```
396
454
 
397
- ## Step 8: Automatic Sync in Your Workflow
455
+ ## Step 7: Automatic Sync in Your Workflow
398
456
 
399
457
  Add this to `package.json`:
400
458
 
@@ -409,7 +467,7 @@ Add this to `package.json`:
409
467
 
410
468
  Now you automatically pull the latest translations on startup.
411
469
 
412
- ## Step 9 (Optional): Set Up Preview Mode
470
+ ## Step 8 (Optional): Set Up Preview Mode
413
471
 
414
472
  Enable live in-context preview — editors can live see how their text looks in
415
473
  your app.
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * Interactive `init` command.
3
3
  *
4
- * Walks the user through a series of prompts and writes a
5
- * `.translationsrc.json` config file to the project root.
6
- * Optionally scaffolds the i18n boilerplate files (settings,
7
- * client, server, provider) into the chosen i18n directory.
4
+ * Walks the user through a series of prompts and generates:
5
+ * - .env.local (CMS credentials)
6
+ * - .translationsrc.json (scanner + pull config)
7
+ * - next.config.ts (or updates existing)
8
+ * - i18n directory structure
8
9
  */
9
10
  export declare function runInit(root: string): Promise<void>;
10
11
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmJzD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAiRA;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkPzD"}
@@ -1,13 +1,226 @@
1
1
  import path from 'path';
2
2
  import fs from 'fs';
3
3
  import { scaffoldI18n } from '../scaffold/index.js';
4
+ /**
5
+ * Detect if next.config.ts already has withTranslationSync wrapper
6
+ */
7
+ function hasTranslationSyncWrapper(configContent) {
8
+ return (configContent.includes('withTranslationSync') ||
9
+ configContent.includes('@translation-cms/sync'));
10
+ }
11
+ /**
12
+ * Detect the export pattern in next.config.ts
13
+ */
14
+ function detectExportPattern(configContent) {
15
+ const varExportMatch = configContent.match(/export\s+default\s+(\w+)\s*;/);
16
+ if (varExportMatch) {
17
+ return {
18
+ pattern: varExportMatch[0],
19
+ type: 'default-variable',
20
+ varName: varExportMatch[1],
21
+ };
22
+ }
23
+ const objectExportMatch = configContent.match(/export\s+default\s+\{[\s\S]*?\};/);
24
+ if (objectExportMatch) {
25
+ return {
26
+ pattern: objectExportMatch[0],
27
+ type: 'default-object',
28
+ };
29
+ }
30
+ const wrappedExportMatch = configContent.match(/export\s+default\s+\w+\([^)]*\)\s*;/);
31
+ if (wrappedExportMatch) {
32
+ return {
33
+ pattern: wrappedExportMatch[0],
34
+ type: 'default-wrapped',
35
+ };
36
+ }
37
+ return null;
38
+ }
39
+ /**
40
+ * Merge sync-translations config into existing next.config.ts
41
+ */
42
+ function mergeTranslationSyncConfig(existingContent) {
43
+ if (hasTranslationSyncWrapper(existingContent)) {
44
+ return {
45
+ merged: existingContent,
46
+ alreadyMerged: true,
47
+ detectFailed: false,
48
+ };
49
+ }
50
+ const exportMatch = detectExportPattern(existingContent);
51
+ if (!exportMatch) {
52
+ return {
53
+ merged: existingContent,
54
+ alreadyMerged: false,
55
+ detectFailed: true,
56
+ };
57
+ }
58
+ let merged = existingContent;
59
+ if (!merged.includes('withTranslationSync')) {
60
+ const importLine = "import { withTranslationSync } from '@translation-cms/sync/next';\n";
61
+ const lastImportMatch = [...merged.matchAll(/^import\s.+;$/gm)].pop();
62
+ if (lastImportMatch?.index !== undefined) {
63
+ const insertPos = lastImportMatch.index + lastImportMatch[0].length;
64
+ merged = merged.slice(0, insertPos) + '\n' + importLine;
65
+ }
66
+ else {
67
+ merged = importLine + merged;
68
+ }
69
+ }
70
+ if (exportMatch.type === 'default-variable') {
71
+ const oldExport = exportMatch.pattern;
72
+ const newExport = `export default withTranslationSync(${exportMatch.varName});`;
73
+ merged = merged.replace(oldExport, newExport);
74
+ }
75
+ else if (exportMatch.type === 'default-object') {
76
+ const oldExport = exportMatch.pattern;
77
+ const configBody = oldExport
78
+ .replace(/^export\s+default\s+/, '')
79
+ .replace(/;$/, '');
80
+ const newCode = `const nextConfig = ${configBody};\n\nexport default withTranslationSync(nextConfig);`;
81
+ merged = merged.replace(oldExport, newCode);
82
+ }
83
+ return {
84
+ merged,
85
+ alreadyMerged: false,
86
+ detectFailed: false,
87
+ };
88
+ }
89
+ /**
90
+ * Generate or update next.config.ts with sync-translations configuration.
91
+ */
92
+ function generateNextConfig(root, options) {
93
+ const configPath = path.join(root, 'next.config.ts');
94
+ const tsconfigPath = path.join(root, 'tsconfig.json');
95
+ // Parse tsconfig.json to extract path mappings
96
+ let pathMappingsCode = "'@/*': ['src/*']";
97
+ try {
98
+ if (fs.existsSync(tsconfigPath)) {
99
+ const tsconfigContent = fs.readFileSync(tsconfigPath, 'utf-8');
100
+ // Try to find all path mappings, not just @/*
101
+ const pathsMatch = tsconfigContent.match(/"paths":\s*\{([^}]+)\}/);
102
+ if (pathsMatch) {
103
+ const pathsContent = pathsMatch[1];
104
+ // Extract all path mappings as key: [values]
105
+ const mappings = [];
106
+ const pathRegex = /"([^"]+)":\s*\[\s*"([^"]+)"\s*\]/g;
107
+ let match;
108
+ while ((match = pathRegex.exec(pathsContent)) !== null) {
109
+ mappings.push(`'${match[1]}': ['${match[2]}']`);
110
+ }
111
+ if (mappings.length > 0) {
112
+ pathMappingsCode = mappings.join(',\n ');
113
+ }
114
+ }
115
+ }
116
+ }
117
+ catch {
118
+ // Use default if tsconfig parsing fails
119
+ }
120
+ const pluralLine = options.pluralSuffixes
121
+ ? "const pluralSuffixes = ['_zero', '_one', '_two', '_few', '_many', '_other'];\n\n"
122
+ : '';
123
+ const verboseArg = options.syncOnDev || options.syncOnBuild ? ', verbose: true' : '';
124
+ const syncOnDevBlock = options.syncOnDev
125
+ ? ` await syncTranslations({\n projectRoot: '.',\n pathMappings,${verboseArg}\n pluralSuffixes,\n });\n`
126
+ : '';
127
+ const pullOnDevBlock = ` await pullTranslations({ projectRoot: '.'${verboseArg} });\n`;
128
+ const watchBlock = options.watchOnDev
129
+ ? ` watchTranslations({ projectRoot: '.', interval: ${options.watchInterval} });\n`
130
+ : '';
131
+ const syncOnBuildBlock = options.syncOnBuild
132
+ ? ` await syncTranslations({\n projectRoot: '.',\n pathMappings,\n pluralSuffixes,\n });\n`
133
+ : '';
134
+ const pullOnBuildBlock = ` await pullTranslations({ projectRoot: '.'${verboseArg} });\n`;
135
+ let configContent;
136
+ if (fs.existsSync(configPath)) {
137
+ configContent = fs.readFileSync(configPath, 'utf-8');
138
+ // Try to merge if file exists
139
+ const mergeResult = mergeTranslationSyncConfig(configContent);
140
+ if (mergeResult.alreadyMerged) {
141
+ // eslint-disable-next-line no-console
142
+ console.log(`[Already merged] next.config.ts`);
143
+ return;
144
+ }
145
+ if (!mergeResult.detectFailed) {
146
+ // Successfully merged
147
+ configContent = mergeResult.merged;
148
+ fs.writeFileSync(configPath, configContent, 'utf-8');
149
+ // eslint-disable-next-line no-console
150
+ console.log(`[Merged] next.config.ts`);
151
+ return;
152
+ }
153
+ // If detect failed, show warning
154
+ if (configContent.length >= 50) {
155
+ // eslint-disable-next-line no-console
156
+ console.log(`\n[Warning] next.config.ts exists but auto-merge failed.`);
157
+ // eslint-disable-next-line no-console
158
+ console.log('(Could not detect export pattern - review manually)\n');
159
+ // eslint-disable-next-line no-console
160
+ console.log('Recommended manual merge - add this import and wrap the export:\n');
161
+ // eslint-disable-next-line no-console
162
+ console.log("import { withTranslationSync } from '@translation-cms/sync/next';");
163
+ // eslint-disable-next-line no-console
164
+ console.log('export default withTranslationSync(yourConfig);\n');
165
+ return;
166
+ }
167
+ }
168
+ else {
169
+ // Create new next.config.ts
170
+ configContent = '';
171
+ }
172
+ // Generate the template if file is empty or doesn't exist
173
+ if (!configContent || configContent.length < 50) {
174
+ configContent = `import type { NextConfig } from '../next.js';
175
+ import {
176
+ PHASE_DEVELOPMENT_SERVER,
177
+ PHASE_PRODUCTION_BUILD,
178
+ } from 'next/constants';
179
+ import {
180
+ syncTranslations,
181
+ pullTranslations,
182
+ watchTranslations,
183
+ } from '@translation-cms/sync/api';
184
+ import { withTranslationSync } from '@translation-cms/sync/next';
185
+
186
+ // Mirror your tsconfig.json paths so the scanner can resolve @/ alias imports
187
+ const pathMappings: Record<string, string[]> = {
188
+ ${pathMappingsCode},
189
+ };
190
+
191
+ ${pluralLine}export default async function config(
192
+ phase: string
193
+ ): Promise<NextConfig> {
194
+ if (phase === PHASE_DEVELOPMENT_SERVER) {
195
+ ${syncOnDevBlock}${pullOnDevBlock}${watchBlock} }
196
+
197
+ if (phase === PHASE_PRODUCTION_BUILD) {
198
+ ${syncOnBuildBlock}${pullOnBuildBlock} }
199
+
200
+ const nextConfig: NextConfig = {
201
+ // Your Next.js configuration goes here
202
+ // Example:
203
+ // images: { remotePatterns: [...] },
204
+ // redirects: async () => [...],
205
+ // rewrites: async () => [...],
206
+ };
207
+
208
+ return withTranslationSync(nextConfig);
209
+ }
210
+ `;
211
+ fs.writeFileSync(configPath, configContent, 'utf-8');
212
+ // eslint-disable-next-line no-console
213
+ console.log(`[Created] next.config.ts`);
214
+ }
215
+ }
4
216
  /**
5
217
  * Interactive `init` command.
6
218
  *
7
- * Walks the user through a series of prompts and writes a
8
- * `.translationsrc.json` config file to the project root.
9
- * Optionally scaffolds the i18n boilerplate files (settings,
10
- * client, server, provider) into the chosen i18n directory.
219
+ * Walks the user through a series of prompts and generates:
220
+ * - .env.local (CMS credentials)
221
+ * - .translationsrc.json (scanner + pull config)
222
+ * - next.config.ts (or updates existing)
223
+ * - i18n directory structure
11
224
  */
12
225
  export async function runInit(root) {
13
226
  const { createInterface } = await import('readline');
@@ -18,57 +231,136 @@ export async function runInit(root) {
18
231
  });
19
232
  const question = (prompt) => new Promise(resolve => rl.question(prompt, resolve));
20
233
  // eslint-disable-next-line no-console
21
- console.log('sync-translations init\n');
234
+ console.log('\n--- sync-translations setup ---\n');
22
235
  // eslint-disable-next-line no-console
23
- console.log('This creates .translationsrc.json in your project root.');
236
+ console.log('This wizard will generate:');
24
237
  // eslint-disable-next-line no-console
25
- console.log('Values here override env vars for the sync-translations CLI.\n');
26
- // Collect required config values from the user
27
- const cmsUrl = await question('CMS URL (e.g. https://cms.example.com): ');
28
- const projectId = await question('Project ID: ');
29
- const apiKey = await question('API key: ');
30
- const i18nDirInput = await question('i18n directory [./src/lib/i18n]: ');
31
- const pullTtlInput = await question('Pull TTL in seconds [300]: ');
32
- const scaffoldInput = await question('Scaffold i18n files (settings, client, server, provider)? [Y/n]: ');
238
+ console.log(' - .env.local (CMS credentials)');
239
+ // eslint-disable-next-line no-console
240
+ console.log(' - .translationsrc.json (config)');
241
+ // eslint-disable-next-line no-console
242
+ console.log(' - next.config.ts (auto-sync setup)');
243
+ // eslint-disable-next-line no-console
244
+ console.log(' - i18n directory structure\n');
245
+ // === CMS Configuration ===
246
+ // eslint-disable-next-line no-console
247
+ console.log('CMS Configuration:');
248
+ const cmsUrl = await question(' CMS URL (e.g. https://cms.example.com): ');
249
+ const projectId = await question(' Project ID: ');
250
+ const apiKey = await question(' API key (JWT): ');
251
+ // === i18n Configuration ===
252
+ // eslint-disable-next-line no-console
253
+ console.log('\ni18n Configuration:');
254
+ const i18nDirInput = await question(' i18n directory [./src/lib/i18n]: ');
255
+ const localesInput = await question(' Locales (comma-separated) [en,nl]: ');
256
+ const pullTtlInput = await question(' Pull TTL in seconds [300]: ');
257
+ // === Scanner Configuration ===
258
+ // eslint-disable-next-line no-console
259
+ console.log('\nScanner Configuration:');
260
+ const previewRoutesInput = await question(' Enable preview routes? [Y/n]: ');
261
+ const pluralInput = await question(' Support pluralization (count option)? [Y/n]: ');
262
+ // === Next.js Configuration ===
263
+ // eslint-disable-next-line no-console
264
+ console.log('\nNext.js Integration:');
265
+ const syncOnDevInput = await question(' Auto-sync on dev startup? [Y/n]: ');
266
+ const syncOnBuildInput = await question(' Auto-sync on build? [Y/n]: ');
267
+ const watchOnDevInput = await question(' Watch CMS for updates in dev? [Y/n]: ');
268
+ const watchIntervalInput = await question(' Watch interval in seconds [300]: ');
269
+ // === Scaffolding ===
270
+ const scaffoldInput = await question('\nScaffold i18n files (settings, client, server, provider)? [Y/n]: ');
33
271
  rl.close();
34
- // Apply defaults for optional fields
272
+ // === Parse Answers ===
35
273
  const i18nDir = i18nDirInput.trim() || './src/lib/i18n';
36
- // Dictionaries live one level deeper than the i18n dir
37
274
  const outputDir = `${i18nDir.replace(/\/$/, '')}/dictionaries`;
38
- // Build the config object — only include keys that the user actually provided
39
- const config = {
40
- $schema: './node_modules/@translation-cms/sync/schema.json',
41
- };
275
+ const locales = localesInput
276
+ .trim()
277
+ .split(',')
278
+ .map(l => l.trim())
279
+ .filter(l => l) || ['en', 'nl'];
280
+ const ttlSeconds = pullTtlInput.trim()
281
+ ? parseInt(pullTtlInput.trim(), 10)
282
+ : 300;
283
+ const previewRoutes = previewRoutesInput.trim().toLowerCase() !== 'n';
284
+ const pluralSuffixes = pluralInput.trim().toLowerCase() !== 'n';
285
+ const syncOnDev = syncOnDevInput.trim().toLowerCase() !== 'n';
286
+ const syncOnBuild = syncOnBuildInput.trim().toLowerCase() !== 'n';
287
+ const watchOnDev = watchOnDevInput.trim().toLowerCase() !== 'n';
288
+ const watchInterval = watchIntervalInput.trim()
289
+ ? parseInt(watchIntervalInput.trim(), 10) * 1000
290
+ : 300000;
291
+ // === 1. Write .env.local ===
292
+ const envPath = path.join(root, '.env.local');
293
+ let envContent = '';
294
+ if (fs.existsSync(envPath)) {
295
+ envContent = fs.readFileSync(envPath, 'utf-8');
296
+ }
297
+ // Remove existing translation-related vars to avoid duplicates
298
+ envContent = envContent
299
+ .split('\n')
300
+ .filter(line => !line.startsWith('NEXT_PUBLIC_CMS_URL=') &&
301
+ !line.startsWith('NEXT_PUBLIC_CMS_PROJECT_ID=') &&
302
+ !line.startsWith('CMS_SYNC_API_KEY='))
303
+ .filter(line => line.trim() !== '')
304
+ .join('\n');
305
+ const envVars = [];
42
306
  if (cmsUrl.trim())
43
- config['cmsUrl'] = cmsUrl.trim();
307
+ envVars.push(`NEXT_PUBLIC_CMS_URL=${cmsUrl.trim()}`);
44
308
  if (projectId.trim())
45
- config['projectId'] = projectId.trim();
309
+ envVars.push(`NEXT_PUBLIC_CMS_PROJECT_ID=${projectId.trim()}`);
46
310
  if (apiKey.trim())
47
- config['apiKey'] = apiKey.trim();
311
+ envVars.push(`CMS_SYNC_API_KEY=${apiKey.trim()}`);
312
+ if (envVars.length > 0) {
313
+ envContent = envContent + (envContent ? '\n' : '') + envVars.join('\n');
314
+ fs.writeFileSync(envPath, envContent, 'utf-8');
315
+ // eslint-disable-next-line no-console
316
+ console.log(`\n[Created] .env.local`);
317
+ envVars.forEach(v => {
318
+ const [key] = v.split('=');
319
+ // eslint-disable-next-line no-console
320
+ console.log(` + ${key}`);
321
+ });
322
+ }
323
+ // === 2. Generate .translationsrc.json ===
324
+ const config = {
325
+ $schema: './node_modules/@translation-cms/sync/schema.json',
326
+ };
48
327
  config['outputDir'] = outputDir;
49
- if (pullTtlInput.trim()) {
50
- const ttlSec = parseInt(pullTtlInput.trim(), 10);
51
- // Convert seconds → milliseconds for the config field
52
- if (!isNaN(ttlSec))
53
- config['pullTtlMs'] = ttlSec * 1000;
328
+ config['pullTtlMs'] = ttlSeconds * 1000;
329
+ config['previewRoutes'] = previewRoutes;
330
+ config['locales'] = locales;
331
+ if (pluralSuffixes) {
332
+ config['pluralSuffixes'] = [
333
+ '_one',
334
+ '_other',
335
+ '_zero',
336
+ '_two',
337
+ '_few',
338
+ '_many',
339
+ ];
54
340
  }
55
- // Write the config file
341
+ config['excludedDirs'] = [
342
+ 'e2e',
343
+ 'node_modules',
344
+ 'dist',
345
+ '.next',
346
+ 'build',
347
+ 'fixtures',
348
+ ];
349
+ config['sourceExtensions'] = ['.ts', '.tsx', '.js', '.jsx'];
56
350
  const configPath = path.join(root, '.translationsrc.json');
57
351
  fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
58
- console.log(`\nCreated: ${configPath}`);
59
- console.log('\nTip: add "previewRoutes": false to skip preview route detection and');
60
- console.log(' route params cache (.cms-sync-cache-meta.json). Useful for projects');
61
- console.log(" that don't use the CMS preview feature — speeds up sync significantly.");
62
- console.log('\nTip: For projects using pluralized translation keys (with count option),');
63
- console.log(' add pluralSuffixes to syncTranslations() in next.config.ts to register');
64
- console.log(' plural forms (_one, _other, _zero, etc.) automatically.');
65
- // Warn if an API key was written to disk — it should ideally stay in .env.local
66
- if (config['apiKey']) {
67
- console.log('\nWarning: .translationsrc.json contains an API key. Consider adding it to .gitignore:');
68
- console.log(' echo ".translationsrc.json" >> .gitignore');
69
- console.log('Or move the API key to CMS_SYNC_API_KEY in .env.local instead.');
70
- }
71
- // Default to scaffolding unless the user explicitly answers "n"
352
+ // eslint-disable-next-line no-console
353
+ console.log(`[Created] .translationsrc.json`);
354
+ // === 3. Generate next.config.ts ===
355
+ generateNextConfig(root, {
356
+ i18nDir,
357
+ syncOnDev,
358
+ syncOnBuild,
359
+ watchOnDev,
360
+ watchInterval,
361
+ pluralSuffixes,
362
+ });
363
+ // === 4. Scaffold i18n files ===
72
364
  const doScaffold = scaffoldInput.trim().toLowerCase() !== 'n';
73
365
  if (doScaffold) {
74
366
  const absI18nDir = path.isAbsolute(i18nDir)
@@ -76,41 +368,56 @@ export async function runInit(root) {
76
368
  : path.resolve(root, i18nDir);
77
369
  const { written, skipped } = scaffoldI18n({ i18nDir: absI18nDir });
78
370
  if (written.length > 0) {
79
- console.log('\nScaffolded i18n files:');
80
- for (const f of written)
81
- console.log(` + src/lib/i18n/${f}`);
371
+ // eslint-disable-next-line no-console
372
+ console.log(`\n[Scaffolded] i18n files:`);
373
+ for (const f of written) {
374
+ // eslint-disable-next-line no-console
375
+ console.log(` + ${f}`);
376
+ }
82
377
  }
83
378
  if (skipped.length > 0) {
84
- // Files that already exist are left untouched to avoid overwriting customizations
85
- console.log('\nSkipped (already exist):');
86
- for (const f of skipped)
87
- console.log(` ~ src/lib/i18n/${f}`);
379
+ // eslint-disable-next-line no-console
380
+ console.log(`[Skipped] (already exist):`);
381
+ for (const f of skipped) {
382
+ // eslint-disable-next-line no-console
383
+ console.log(` ~ ${f}`);
384
+ }
88
385
  }
89
- console.log('\nNext steps:');
90
- console.log(' 1. Install peer deps: pnpm add i18next react-i18next i18next-resources-to-backend');
91
- console.log(' 2. Add to next.config.ts:');
92
- console.log('');
93
- console.log(" import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_BUILD } from 'next/constants';");
94
- console.log(" import { syncTranslations, pullTranslations, watchTranslations } from '@translation-cms/sync/api';");
95
- console.log('');
96
- console.log(" const pathMappings = { '@/*': ['src/*'] }; // mirror your tsconfig paths");
97
- console.log(" const pluralSuffixes = ['_one', '_other', '_zero', '_two', '_few', '_many'];");
98
- console.log('');
99
- console.log(' export default async function config(phase) {');
100
- console.log(' if (phase === PHASE_DEVELOPMENT_SERVER) {');
101
- console.log(" await syncTranslations({ projectRoot: '.', pathMappings, pluralSuffixes });");
102
- console.log(" await pullTranslations({ projectRoot: '.' });");
103
- console.log(" watchTranslations({ projectRoot: '.' }); // auto-pull on publish");
104
- console.log(' }');
105
- console.log(' if (phase === PHASE_PRODUCTION_BUILD) {');
106
- console.log(" await syncTranslations({ projectRoot: '.', pathMappings, pluralSuffixes });");
107
- console.log(" await pullTranslations({ projectRoot: '.' });");
108
- console.log(' }');
109
- console.log(' return { /* your next.js config */ };');
110
- console.log(' }');
111
- console.log('');
112
- console.log(' 3. Pull translations: sync-translations pull');
113
- console.log(' 4. Wrap your root layout with <TranslationProvider locale={locale}>');
114
386
  }
387
+ // === Summary ===
388
+ // eslint-disable-next-line no-console
389
+ console.log('\n--- Setup Complete ---\n');
390
+ // eslint-disable-next-line no-console
391
+ console.log('Next steps:');
392
+ // eslint-disable-next-line no-console
393
+ console.log(' 1. Install peer dependencies:');
394
+ // eslint-disable-next-line no-console
395
+ console.log(' pnpm add i18next react-i18next i18next-resources-to-backend');
396
+ // eslint-disable-next-line no-console
397
+ console.log('');
398
+ // eslint-disable-next-line no-console
399
+ console.log(' 2. Fill in your first translations in the CMS');
400
+ // eslint-disable-next-line no-console
401
+ console.log('');
402
+ // eslint-disable-next-line no-console
403
+ console.log(' 3. Pull translations for the first time:');
404
+ // eslint-disable-next-line no-console
405
+ console.log(' pnpm sync-translations pull');
406
+ // eslint-disable-next-line no-console
407
+ console.log('');
408
+ // eslint-disable-next-line no-console
409
+ console.log(' 4. Wrap your root layout with <TranslationProvider>:');
410
+ // eslint-disable-next-line no-console
411
+ console.log(` import { TranslationProvider } from '@/lib/i18n/provider';`);
412
+ // eslint-disable-next-line no-console
413
+ console.log('');
414
+ // eslint-disable-next-line no-console
415
+ console.log('Configuration saved to:');
416
+ // eslint-disable-next-line no-console
417
+ console.log(` - .env.local`);
418
+ // eslint-disable-next-line no-console
419
+ console.log(` - .translationsrc.json`);
420
+ // eslint-disable-next-line no-console
421
+ console.log(` - next.config.ts`);
115
422
  }
116
423
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/core/api-internals/sync.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EACR,iBAAiB,EAEpB,MAAM,4BAA4B,CAAC;AAapC;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EACxB,IAAI,GAAE,iBAA2C,GAClD,OAAO,CAAC,IAAI,CAAC,CA0Jf"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/core/api-internals/sync.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EACR,iBAAiB,EAEpB,MAAM,4BAA4B,CAAC;AAapC;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EACxB,IAAI,GAAE,iBAA2C,GAClD,OAAO,CAAC,IAAI,CAAC,CA8Jf"}
@@ -83,7 +83,11 @@ export async function postToSync(config, namespaces, opts = { root: process.cwd(
83
83
  'Content-Type': 'application/json',
84
84
  'x-api-key': config.apiKey,
85
85
  },
86
- body: JSON.stringify({ namespaces: apiPayload, pruneKeys, pluralSuffixes: opts.pluralSuffixes }),
86
+ body: JSON.stringify({
87
+ namespaces: apiPayload,
88
+ pruneKeys,
89
+ pluralSuffixes: opts.pluralSuffixes,
90
+ }),
87
91
  });
88
92
  const contentType = response.headers.get('content-type') ?? '';
89
93
  const isJson = contentType.includes('application/json');
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/core/api-internals/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/core/api-internals/sync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@translation-cms/sync",
3
- "version": "1.2.81",
3
+ "version": "1.2.83",
4
4
  "description": "Scan translation keys in your codebase and sync them to the Translations CMS",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",