@translation-cms/sync 1.1.69 → 1.1.71

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 (63) hide show
  1. package/README.md +131 -545
  2. package/dist/cli-entry.d.ts +3 -0
  3. package/dist/cli-entry.d.ts.map +1 -0
  4. package/dist/cli-entry.js +268 -0
  5. package/dist/cli-entry.js.map +1 -0
  6. package/dist/cli.d.ts +15 -2
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +11 -263
  9. package/dist/cli.js.map +1 -1
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +26 -25
  12. package/dist/client.js.map +1 -1
  13. package/dist/i18next.d.ts +62 -0
  14. package/dist/i18next.d.ts.map +1 -0
  15. package/dist/i18next.js +127 -0
  16. package/dist/i18next.js.map +1 -0
  17. package/dist/index.d.ts +20 -6
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +30 -15
  20. package/dist/index.js.map +1 -1
  21. package/dist/{config.d.ts → load-config.d.ts} +1 -1
  22. package/dist/load-config.d.ts.map +1 -0
  23. package/dist/{config.js → load-config.js} +1 -1
  24. package/dist/load-config.js.map +1 -0
  25. package/dist/{preview-listener.d.ts → preview.d.ts} +1 -1
  26. package/dist/preview.d.ts.map +1 -0
  27. package/dist/{preview-listener.js → preview.js} +1 -1
  28. package/dist/preview.js.map +1 -0
  29. package/dist/{cli-config.d.ts → resolve-config.d.ts} +2 -2
  30. package/dist/resolve-config.d.ts.map +1 -0
  31. package/dist/{cli-config.js → resolve-config.js} +1 -1
  32. package/dist/resolve-config.js.map +1 -0
  33. package/dist/sync.d.ts +1 -1
  34. package/dist/sync.d.ts.map +1 -1
  35. package/dist/sync.js +27 -13
  36. package/dist/sync.js.map +1 -1
  37. package/package.json +9 -17
  38. package/dist/cli-config.d.ts.map +0 -1
  39. package/dist/cli-config.js.map +0 -1
  40. package/dist/cli-utils.d.ts +0 -16
  41. package/dist/cli-utils.d.ts.map +0 -1
  42. package/dist/cli-utils.js +0 -16
  43. package/dist/cli-utils.js.map +0 -1
  44. package/dist/config.d.ts.map +0 -1
  45. package/dist/config.js.map +0 -1
  46. package/dist/preview-listener.d.ts.map +0 -1
  47. package/dist/preview-listener.js.map +0 -1
  48. package/dist/trans.d.ts +0 -2
  49. package/dist/trans.d.ts.map +0 -1
  50. package/dist/trans.js +0 -3
  51. package/dist/trans.js.map +0 -1
  52. package/dist/translation-context.d.ts +0 -10
  53. package/dist/translation-context.d.ts.map +0 -1
  54. package/dist/translation-context.js +0 -4
  55. package/dist/translation-context.js.map +0 -1
  56. package/dist/translation-provider.d.ts +0 -15
  57. package/dist/translation-provider.d.ts.map +0 -1
  58. package/dist/translation-provider.js +0 -97
  59. package/dist/translation-provider.js.map +0 -1
  60. package/dist/use-translation.d.ts +0 -35
  61. package/dist/use-translation.d.ts.map +0 -1
  62. package/dist/use-translation.js +0 -110
  63. package/dist/use-translation.js.map +0 -1
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-entry.d.ts","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,268 @@
1
+ #!/usr/bin/env node
2
+ import path from 'path';
3
+ import fs from 'fs';
4
+ import { resolveConfig, findProjectRoot } from './resolve-config.js';
5
+ import { scanProject } from './scanner.js';
6
+ import { postToSync, pullTranslations, loadSyncCache, serializeNamespaces, computeDiff, formatPreviewRoutes, } from './sync.js';
7
+ import { loadConfigFile } from './load-config.js';
8
+ /**
9
+ * sync-translations CLI
10
+ *
11
+ * Subcommands:
12
+ * sync (default) Scan codebase and sync translation keys to the CMS.
13
+ * pull Fetch translations from CMS and write local JSON files.
14
+ * status Show what would change on next sync (no network calls).
15
+ * watch Watch for file changes and auto-sync on save.
16
+ * init Interactive setup — creates .translationsrc.json.
17
+ *
18
+ * Usage:
19
+ * sync-translations # sync keys + pull
20
+ * sync-translations sync # same as above
21
+ * sync-translations sync --dry-run # preview changes only
22
+ * sync-translations sync --report scan.json # write JSON report
23
+ * sync-translations pull # pull to ./public/locales
24
+ * sync-translations pull --output ./locales # custom output dir
25
+ * sync-translations pull --force # ignore TTL cache
26
+ * sync-translations pull --env staging # pull staging translations
27
+ * sync-translations pull --ttl 600000 # custom TTL (ms)
28
+ * sync-translations status # diff vs last sync cache
29
+ * sync-translations watch # watch + auto-sync
30
+ * sync-translations init # interactive setup
31
+ *
32
+ * Or configure via .env.local / .translationsrc.json:
33
+ * NEXT_PUBLIC_CMS_PROJECT_ID=abc123
34
+ * CMS_SYNC_API_KEY=secret
35
+ * NEXT_PUBLIC_CMS_URL=https://cms.example.com
36
+ */
37
+ const SUBCOMMANDS = new Set(['sync', 'pull', 'status', 'watch', 'init']);
38
+ // ---------------------------------------------------------------------------
39
+ // Arg helpers
40
+ // ---------------------------------------------------------------------------
41
+ function getFlag(args, flag) {
42
+ const idx = args.indexOf(flag);
43
+ return idx !== -1 && args[idx + 1] ? args[idx + 1] : undefined;
44
+ }
45
+ function hasFlag(args, ...flags) {
46
+ return flags.some(f => args.includes(f));
47
+ }
48
+ // ---------------------------------------------------------------------------
49
+ // status subcommand
50
+ // ---------------------------------------------------------------------------
51
+ function runStatus(root, scanOpts) {
52
+ console.log(`Scanning project: ${root}`);
53
+ const namespaces = scanProject(root, scanOpts);
54
+ const { serialized, totalKeys } = serializeNamespaces(namespaces);
55
+ const namespaceCount = Object.keys(serialized).length;
56
+ console.log(`\nFound ${totalKeys} key(s) across ${namespaceCount} namespace(s): ${Object.keys(serialized).join(', ')}`);
57
+ const cached = loadSyncCache(root);
58
+ if (!cached) {
59
+ console.log('\nNo sync cache found (.cms-sync-cache.json). Run sync first to establish a baseline.');
60
+ return;
61
+ }
62
+ const diff = computeDiff(serialized, cached);
63
+ console.log('\nStatus vs last sync:');
64
+ console.log(` + ${diff.added.length} new key(s)`);
65
+ console.log(` - ${diff.removed.length} removed key(s)`);
66
+ console.log(` ~ ${diff.routesChanged.length} route update(s)`);
67
+ console.log(` = ${diff.unchanged} unchanged`);
68
+ if (diff.added.length > 0) {
69
+ console.log('\nNew keys:');
70
+ for (const { namespace, key, routes } of diff.added) {
71
+ console.log(` + ${namespace}:${key} (${formatPreviewRoutes(routes)})`);
72
+ }
73
+ }
74
+ if (diff.removed.length > 0) {
75
+ console.log('\nRemoved keys:');
76
+ for (const { namespace, key } of diff.removed) {
77
+ console.log(` - ${namespace}:${key}`);
78
+ }
79
+ }
80
+ if (diff.routesChanged.length > 0) {
81
+ console.log('\nRoute updates:');
82
+ for (const { namespace, key, before, after } of diff.routesChanged) {
83
+ console.log(` ~ ${namespace}:${key} [${formatPreviewRoutes(before)}] -> [${formatPreviewRoutes(after)}]`);
84
+ }
85
+ }
86
+ const total = diff.added.length + diff.removed.length + diff.routesChanged.length;
87
+ if (total > 0) {
88
+ console.log('\nRun "sync-translations sync" to push these changes.');
89
+ }
90
+ else {
91
+ console.log('\nEverything is in sync.');
92
+ }
93
+ }
94
+ // ---------------------------------------------------------------------------
95
+ // watch subcommand
96
+ // ---------------------------------------------------------------------------
97
+ async function runWatch(root, config, outputDir, scanOpts) {
98
+ console.log(`[watch] Watching ${root} for changes...`);
99
+ console.log('[watch] Press Ctrl+C to stop.\n');
100
+ const sourceExtensions = new Set(scanOpts.sourceExtensions ?? ['.ts', '.tsx', '.js', '.jsx']);
101
+ let debounce = null;
102
+ let running = false;
103
+ const runSync = async () => {
104
+ if (running)
105
+ return;
106
+ running = true;
107
+ try {
108
+ const namespaces = scanProject(root, scanOpts);
109
+ await postToSync(config, namespaces, { root, force: true });
110
+ await pullTranslations(config, { outputDir, force: true });
111
+ }
112
+ catch (err) {
113
+ console.error('[watch] Sync error:', err instanceof Error ? err.message : String(err));
114
+ }
115
+ finally {
116
+ running = false;
117
+ }
118
+ };
119
+ // Initial sync on start
120
+ await runSync();
121
+ // Recursively watch for file changes
122
+ const watcher = fs.watch(root, { recursive: true }, (_evt, filename) => {
123
+ if (!filename)
124
+ return;
125
+ const ext = path.extname(filename);
126
+ if (!sourceExtensions.has(ext))
127
+ return;
128
+ if (debounce)
129
+ clearTimeout(debounce);
130
+ debounce = setTimeout(() => {
131
+ console.log(`[watch] Change detected: ${filename}`);
132
+ void runSync();
133
+ }, 500);
134
+ });
135
+ process.on('SIGINT', () => {
136
+ watcher.close();
137
+ console.log('\n[watch] Stopped.');
138
+ process.exit(0);
139
+ });
140
+ // Keep the process alive
141
+ await new Promise(() => undefined);
142
+ }
143
+ // ---------------------------------------------------------------------------
144
+ // init subcommand
145
+ // ---------------------------------------------------------------------------
146
+ async function runInit(root) {
147
+ const { createInterface } = await import('readline');
148
+ const rl = createInterface({
149
+ input: process.stdin,
150
+ output: process.stdout,
151
+ });
152
+ const question = (prompt) => new Promise(resolve => rl.question(prompt, resolve));
153
+ console.log('sync-translations init\n');
154
+ console.log('This creates .translationsrc.json in your project root.');
155
+ console.log('Values here override env vars for the sync-translations CLI.\n');
156
+ const cmsUrl = await question('CMS URL (e.g. https://cms.example.com): ');
157
+ const projectId = await question('Project ID: ');
158
+ const apiKey = await question('API key: ');
159
+ const outputDir = await question('Pull output directory [./public/locales]: ');
160
+ const pullTtlInput = await question('Pull TTL in seconds [300]: ');
161
+ rl.close();
162
+ const config = {};
163
+ if (cmsUrl.trim())
164
+ config['cmsUrl'] = cmsUrl.trim();
165
+ if (projectId.trim())
166
+ config['projectId'] = projectId.trim();
167
+ if (apiKey.trim())
168
+ config['apiKey'] = apiKey.trim();
169
+ if (outputDir.trim())
170
+ config['outputDir'] = outputDir.trim();
171
+ if (pullTtlInput.trim()) {
172
+ const ttlSec = parseInt(pullTtlInput.trim(), 10);
173
+ if (!isNaN(ttlSec))
174
+ config['pullTtlMs'] = ttlSec * 1000;
175
+ }
176
+ const configPath = path.join(root, '.translationsrc.json');
177
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
178
+ console.log(`\nCreated: ${configPath}`);
179
+ if (config['apiKey']) {
180
+ console.log('\nWarning: .translationsrc.json contains an API key. Consider adding it to .gitignore:');
181
+ console.log(' echo ".translationsrc.json" >> .gitignore');
182
+ console.log('Or move the API key to CMS_SYNC_API_KEY in .env.local instead.');
183
+ }
184
+ }
185
+ // ---------------------------------------------------------------------------
186
+ // main
187
+ // ---------------------------------------------------------------------------
188
+ async function main() {
189
+ const args = process.argv.slice(2);
190
+ // Detect subcommand (first non-flag arg)
191
+ const subcommand = args.find(a => !a.startsWith('-')) ?? 'sync';
192
+ if (!SUBCOMMANDS.has(subcommand)) {
193
+ console.error(`Unknown subcommand: ${subcommand}`);
194
+ console.error(`Available subcommands: ${[...SUBCOMMANDS].join(', ')}`);
195
+ process.exit(1);
196
+ }
197
+ const root = findProjectRoot();
198
+ const fileConfig = loadConfigFile(root);
199
+ // init doesn't need a resolved Config
200
+ if (subcommand === 'init') {
201
+ await runInit(root);
202
+ return;
203
+ }
204
+ const config = resolveConfig(root, fileConfig);
205
+ // Build scan options from config file
206
+ const scanOpts = {
207
+ excludedDirs: fileConfig.excludedDirs,
208
+ sourceExtensions: fileConfig.sourceExtensions,
209
+ reservedCssNamespaces: fileConfig.reservedCssNamespaces,
210
+ previewRoutes: fileConfig.previewRoutes,
211
+ };
212
+ // ---- status -------------------------------------------------------------
213
+ if (subcommand === 'status') {
214
+ runStatus(root, scanOpts);
215
+ return;
216
+ }
217
+ // ---- watch --------------------------------------------------------------
218
+ if (subcommand === 'watch') {
219
+ const outputDir = fileConfig.outputDir ?? path.join(root, 'public', 'locales');
220
+ await runWatch(root, config, outputDir, scanOpts);
221
+ return;
222
+ }
223
+ // ---- pull ---------------------------------------------------------------
224
+ if (subcommand === 'pull') {
225
+ const outputArg = getFlag(args, '--output');
226
+ const outputDir = outputArg
227
+ ? path.resolve(root, outputArg)
228
+ : fileConfig.outputDir
229
+ ? path.resolve(root, fileConfig.outputDir)
230
+ : path.join(root, 'public', 'locales');
231
+ const ttlArg = getFlag(args, '--ttl');
232
+ const ttlMs = ttlArg ? parseInt(ttlArg, 10) : fileConfig.pullTtlMs;
233
+ await pullTranslations(config, {
234
+ outputDir,
235
+ force: hasFlag(args, '--force'),
236
+ ttlMs,
237
+ env: getFlag(args, '--env'),
238
+ });
239
+ return;
240
+ }
241
+ // ---- sync (default) + optional pull afterwards --------------------------
242
+ const dryRun = hasFlag(args, '--dry-run');
243
+ const force = hasFlag(args, '--force');
244
+ const reportArg = getFlag(args, '--report');
245
+ const reportPath = reportArg
246
+ ? path.isAbsolute(reportArg)
247
+ ? reportArg
248
+ : path.join(root, reportArg)
249
+ : undefined;
250
+ const outputDir = fileConfig.outputDir ?? path.join(root, 'public', 'locales');
251
+ console.log(`Scanning project: ${root}`);
252
+ const namespaces = scanProject(root, scanOpts);
253
+ await postToSync(config, namespaces, {
254
+ root,
255
+ force,
256
+ dryRun,
257
+ reportPath,
258
+ });
259
+ // Skip pull when dry-running — there's nothing to pull yet
260
+ if (!dryRun) {
261
+ await pullTranslations(config, { outputDir, force });
262
+ }
263
+ }
264
+ main().catch(err => {
265
+ console.error(err);
266
+ process.exit(1);
267
+ });
268
+ //# sourceMappingURL=cli-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,16 @@
1
- #!/usr/bin/env node
2
- export {};
1
+ /**
2
+ * @translation-cms/sync — public CLI utilities
3
+ * Exposed as the `./cli` package export.
4
+ *
5
+ * Internal implementation is split across focused modules:
6
+ * cli-config.ts — config resolution (env vars, .env.local, CLI args)
7
+ * scanner.ts — source-file scanning and key extraction
8
+ * sync.ts — CMS sync/pull API, diff, cache, and reports
9
+ *
10
+ * Everything is re-exported here so consumers and the CLI entry point
11
+ * can import from a single stable path.
12
+ */
13
+ export { type Config, loadEnvLocal, parseArgs, findProjectRoot, resolveConfig, } from './resolve-config.js';
14
+ export { type ScanOptions, type NamespaceMap, DEFAULT_EXCLUDED_DIRS, DEFAULT_SOURCE_EXTENSIONS, DEFAULT_RESERVED_CSS_NAMESPACES, walkFiles, filePathToRoute, extractKeysFromFile, scanProject, } from './scanner.js';
15
+ export { type SerializedNamespaces, type SyncResponse, type SyncDiff, type PullOptions, type PostToSyncOptions, serializeNamespaces, loadSyncCache, saveSyncCache, isSyncNeeded, computeDiff, writeReport, postToSync, pullTranslations, } from './sync.js';
3
16
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACH,KAAK,MAAM,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,aAAa,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAC/B,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,WAAW,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACH,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACnB,MAAM,WAAW,CAAC"}
package/dist/cli.js CHANGED
@@ -1,268 +1,16 @@
1
- #!/usr/bin/env node
2
- import path from 'path';
3
- import fs from 'fs';
4
- import { resolveConfig, findProjectRoot } from './cli-config.js';
5
- import { scanProject } from './scanner.js';
6
- import { postToSync, pullTranslations, loadSyncCache, serializeNamespaces, computeDiff, formatPreviewRoutes, } from './sync.js';
7
- import { loadConfigFile } from './config.js';
8
1
  /**
9
- * sync-translations CLI
2
+ * @translation-cms/sync — public CLI utilities
3
+ * Exposed as the `./cli` package export.
10
4
  *
11
- * Subcommands:
12
- * sync (default) Scan codebase and sync translation keys to the CMS.
13
- * pull Fetch translations from CMS and write local JSON files.
14
- * status Show what would change on next sync (no network calls).
15
- * watch Watch for file changes and auto-sync on save.
16
- * init Interactive setup — creates .translationsrc.json.
5
+ * Internal implementation is split across focused modules:
6
+ * cli-config.ts config resolution (env vars, .env.local, CLI args)
7
+ * scanner.ts — source-file scanning and key extraction
8
+ * sync.ts — CMS sync/pull API, diff, cache, and reports
17
9
  *
18
- * Usage:
19
- * sync-translations # sync keys + pull
20
- * sync-translations sync # same as above
21
- * sync-translations sync --dry-run # preview changes only
22
- * sync-translations sync --report scan.json # write JSON report
23
- * sync-translations pull # pull to ./public/locales
24
- * sync-translations pull --output ./locales # custom output dir
25
- * sync-translations pull --force # ignore TTL cache
26
- * sync-translations pull --env staging # pull staging translations
27
- * sync-translations pull --ttl 600000 # custom TTL (ms)
28
- * sync-translations status # diff vs last sync cache
29
- * sync-translations watch # watch + auto-sync
30
- * sync-translations init # interactive setup
31
- *
32
- * Or configure via .env.local / .translationsrc.json:
33
- * NEXT_PUBLIC_CMS_PROJECT_ID=abc123
34
- * CMS_SYNC_API_KEY=secret
35
- * NEXT_PUBLIC_CMS_URL=https://cms.example.com
10
+ * Everything is re-exported here so consumers and the CLI entry point
11
+ * can import from a single stable path.
36
12
  */
37
- const SUBCOMMANDS = new Set(['sync', 'pull', 'status', 'watch', 'init']);
38
- // ---------------------------------------------------------------------------
39
- // Arg helpers
40
- // ---------------------------------------------------------------------------
41
- function getFlag(args, flag) {
42
- const idx = args.indexOf(flag);
43
- return idx !== -1 && args[idx + 1] ? args[idx + 1] : undefined;
44
- }
45
- function hasFlag(args, ...flags) {
46
- return flags.some(f => args.includes(f));
47
- }
48
- // ---------------------------------------------------------------------------
49
- // status subcommand
50
- // ---------------------------------------------------------------------------
51
- function runStatus(root, scanOpts) {
52
- console.log(`Scanning project: ${root}`);
53
- const namespaces = scanProject(root, scanOpts);
54
- const { serialized, totalKeys } = serializeNamespaces(namespaces);
55
- const namespaceCount = Object.keys(serialized).length;
56
- console.log(`\nFound ${totalKeys} key(s) across ${namespaceCount} namespace(s): ${Object.keys(serialized).join(', ')}`);
57
- const cached = loadSyncCache(root);
58
- if (!cached) {
59
- console.log('\nNo sync cache found (.cms-sync-cache.json). Run sync first to establish a baseline.');
60
- return;
61
- }
62
- const diff = computeDiff(serialized, cached);
63
- console.log('\nStatus vs last sync:');
64
- console.log(` + ${diff.added.length} new key(s)`);
65
- console.log(` - ${diff.removed.length} removed key(s)`);
66
- console.log(` ~ ${diff.routesChanged.length} route update(s)`);
67
- console.log(` = ${diff.unchanged} unchanged`);
68
- if (diff.added.length > 0) {
69
- console.log('\nNew keys:');
70
- for (const { namespace, key, routes } of diff.added) {
71
- console.log(` + ${namespace}:${key} (${formatPreviewRoutes(routes)})`);
72
- }
73
- }
74
- if (diff.removed.length > 0) {
75
- console.log('\nRemoved keys:');
76
- for (const { namespace, key } of diff.removed) {
77
- console.log(` - ${namespace}:${key}`);
78
- }
79
- }
80
- if (diff.routesChanged.length > 0) {
81
- console.log('\nRoute updates:');
82
- for (const { namespace, key, before, after } of diff.routesChanged) {
83
- console.log(` ~ ${namespace}:${key} [${formatPreviewRoutes(before)}] -> [${formatPreviewRoutes(after)}]`);
84
- }
85
- }
86
- const total = diff.added.length + diff.removed.length + diff.routesChanged.length;
87
- if (total > 0) {
88
- console.log('\nRun "sync-translations sync" to push these changes.');
89
- }
90
- else {
91
- console.log('\nEverything is in sync.');
92
- }
93
- }
94
- // ---------------------------------------------------------------------------
95
- // watch subcommand
96
- // ---------------------------------------------------------------------------
97
- async function runWatch(root, config, outputDir, scanOpts) {
98
- console.log(`[watch] Watching ${root} for changes...`);
99
- console.log('[watch] Press Ctrl+C to stop.\n');
100
- const sourceExtensions = new Set(scanOpts.sourceExtensions ?? ['.ts', '.tsx', '.js', '.jsx']);
101
- let debounce = null;
102
- let running = false;
103
- const runSync = async () => {
104
- if (running)
105
- return;
106
- running = true;
107
- try {
108
- const namespaces = scanProject(root, scanOpts);
109
- await postToSync(config, namespaces, { root, force: true });
110
- await pullTranslations(config, { outputDir, force: true });
111
- }
112
- catch (err) {
113
- console.error('[watch] Sync error:', err instanceof Error ? err.message : String(err));
114
- }
115
- finally {
116
- running = false;
117
- }
118
- };
119
- // Initial sync on start
120
- await runSync();
121
- // Recursively watch for file changes
122
- const watcher = fs.watch(root, { recursive: true }, (_evt, filename) => {
123
- if (!filename)
124
- return;
125
- const ext = path.extname(filename);
126
- if (!sourceExtensions.has(ext))
127
- return;
128
- if (debounce)
129
- clearTimeout(debounce);
130
- debounce = setTimeout(() => {
131
- console.log(`[watch] Change detected: ${filename}`);
132
- void runSync();
133
- }, 500);
134
- });
135
- process.on('SIGINT', () => {
136
- watcher.close();
137
- console.log('\n[watch] Stopped.');
138
- process.exit(0);
139
- });
140
- // Keep the process alive
141
- await new Promise(() => undefined);
142
- }
143
- // ---------------------------------------------------------------------------
144
- // init subcommand
145
- // ---------------------------------------------------------------------------
146
- async function runInit(root) {
147
- const { createInterface } = await import('readline');
148
- const rl = createInterface({
149
- input: process.stdin,
150
- output: process.stdout,
151
- });
152
- const question = (prompt) => new Promise(resolve => rl.question(prompt, resolve));
153
- console.log('sync-translations init\n');
154
- console.log('This creates .translationsrc.json in your project root.');
155
- console.log('Values here override env vars for the sync-translations CLI.\n');
156
- const cmsUrl = await question('CMS URL (e.g. https://cms.example.com): ');
157
- const projectId = await question('Project ID: ');
158
- const apiKey = await question('API key: ');
159
- const outputDir = await question('Pull output directory [./public/locales]: ');
160
- const pullTtlInput = await question('Pull TTL in seconds [300]: ');
161
- rl.close();
162
- const config = {};
163
- if (cmsUrl.trim())
164
- config['cmsUrl'] = cmsUrl.trim();
165
- if (projectId.trim())
166
- config['projectId'] = projectId.trim();
167
- if (apiKey.trim())
168
- config['apiKey'] = apiKey.trim();
169
- if (outputDir.trim())
170
- config['outputDir'] = outputDir.trim();
171
- if (pullTtlInput.trim()) {
172
- const ttlSec = parseInt(pullTtlInput.trim(), 10);
173
- if (!isNaN(ttlSec))
174
- config['pullTtlMs'] = ttlSec * 1000;
175
- }
176
- const configPath = path.join(root, '.translationsrc.json');
177
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
178
- console.log(`\nCreated: ${configPath}`);
179
- if (config['apiKey']) {
180
- console.log('\nWarning: .translationsrc.json contains an API key. Consider adding it to .gitignore:');
181
- console.log(' echo ".translationsrc.json" >> .gitignore');
182
- console.log('Or move the API key to CMS_SYNC_API_KEY in .env.local instead.');
183
- }
184
- }
185
- // ---------------------------------------------------------------------------
186
- // main
187
- // ---------------------------------------------------------------------------
188
- async function main() {
189
- const args = process.argv.slice(2);
190
- // Detect subcommand (first non-flag arg)
191
- const subcommand = args.find(a => !a.startsWith('-')) ?? 'sync';
192
- if (!SUBCOMMANDS.has(subcommand)) {
193
- console.error(`Unknown subcommand: ${subcommand}`);
194
- console.error(`Available subcommands: ${[...SUBCOMMANDS].join(', ')}`);
195
- process.exit(1);
196
- }
197
- const root = findProjectRoot();
198
- const fileConfig = loadConfigFile(root);
199
- // init doesn't need a resolved Config
200
- if (subcommand === 'init') {
201
- await runInit(root);
202
- return;
203
- }
204
- const config = resolveConfig(root, fileConfig);
205
- // Build scan options from config file
206
- const scanOpts = {
207
- excludedDirs: fileConfig.excludedDirs,
208
- sourceExtensions: fileConfig.sourceExtensions,
209
- reservedCssNamespaces: fileConfig.reservedCssNamespaces,
210
- previewRoutes: fileConfig.previewRoutes,
211
- };
212
- // ---- status -------------------------------------------------------------
213
- if (subcommand === 'status') {
214
- runStatus(root, scanOpts);
215
- return;
216
- }
217
- // ---- watch --------------------------------------------------------------
218
- if (subcommand === 'watch') {
219
- const outputDir = fileConfig.outputDir ?? path.join(root, 'public', 'locales');
220
- await runWatch(root, config, outputDir, scanOpts);
221
- return;
222
- }
223
- // ---- pull ---------------------------------------------------------------
224
- if (subcommand === 'pull') {
225
- const outputArg = getFlag(args, '--output');
226
- const outputDir = outputArg
227
- ? path.resolve(root, outputArg)
228
- : fileConfig.outputDir
229
- ? path.resolve(root, fileConfig.outputDir)
230
- : path.join(root, 'public', 'locales');
231
- const ttlArg = getFlag(args, '--ttl');
232
- const ttlMs = ttlArg ? parseInt(ttlArg, 10) : fileConfig.pullTtlMs;
233
- await pullTranslations(config, {
234
- outputDir,
235
- force: hasFlag(args, '--force'),
236
- ttlMs,
237
- env: getFlag(args, '--env'),
238
- });
239
- return;
240
- }
241
- // ---- sync (default) + optional pull afterwards --------------------------
242
- const dryRun = hasFlag(args, '--dry-run');
243
- const force = hasFlag(args, '--force');
244
- const reportArg = getFlag(args, '--report');
245
- const reportPath = reportArg
246
- ? path.isAbsolute(reportArg)
247
- ? reportArg
248
- : path.join(root, reportArg)
249
- : undefined;
250
- const outputDir = fileConfig.outputDir ?? path.join(root, 'public', 'locales');
251
- console.log(`Scanning project: ${root}`);
252
- const namespaces = scanProject(root, scanOpts);
253
- await postToSync(config, namespaces, {
254
- root,
255
- force,
256
- dryRun,
257
- reportPath,
258
- });
259
- // Skip pull when dry-running — there's nothing to pull yet
260
- if (!dryRun) {
261
- await pullTranslations(config, { outputDir, force });
262
- }
263
- }
264
- main().catch(err => {
265
- console.error(err);
266
- process.exit(1);
267
- });
13
+ export { loadEnvLocal, parseArgs, findProjectRoot, resolveConfig, } from './resolve-config.js';
14
+ export { DEFAULT_EXCLUDED_DIRS, DEFAULT_SOURCE_EXTENSIONS, DEFAULT_RESERVED_CSS_NAMESPACES, walkFiles, filePathToRoute, extractKeysFromFile, scanProject, } from './scanner.js';
15
+ export { serializeNamespaces, loadSyncCache, saveSyncCache, isSyncNeeded, computeDiff, writeReport, postToSync, pullTranslations, } from './sync.js';
268
16
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAEH,YAAY,EACZ,SAAS,EACT,eAAe,EACf,aAAa,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAGH,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAC/B,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,WAAW,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAMH,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACnB,MAAM,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}