@translation-cms/sync 1.2.1 → 1.2.4
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/dist/bin.d.ts +25 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +173 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +68 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/pull.d.ts +3 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +22 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +46 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +10 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +20 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/watch.d.ts +4 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +51 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/{load-config.d.ts → config/resolve-config.d.ts} +13 -10
- package/dist/config/resolve-config.d.ts.map +1 -0
- package/dist/{resolve-config.js → config/resolve-config.js} +21 -0
- package/dist/config/resolve-config.js.map +1 -0
- package/dist/core/api-internals/helpers.d.ts +9 -0
- package/dist/core/api-internals/helpers.d.ts.map +1 -0
- package/dist/core/api-internals/helpers.js +14 -0
- package/dist/core/api-internals/helpers.js.map +1 -0
- package/dist/core/api-internals/pull.d.ts +11 -0
- package/dist/core/api-internals/pull.d.ts.map +1 -0
- package/dist/core/api-internals/pull.js +124 -0
- package/dist/core/api-internals/pull.js.map +1 -0
- package/dist/core/api-internals/route-config.d.ts +13 -0
- package/dist/core/api-internals/route-config.d.ts.map +1 -0
- package/dist/core/api-internals/route-config.js +34 -0
- package/dist/core/api-internals/route-config.js.map +1 -0
- package/dist/core/api-internals/sync.d.ts +12 -0
- package/dist/core/api-internals/sync.d.ts.map +1 -0
- package/dist/core/api-internals/sync.js +95 -0
- package/dist/core/api-internals/sync.js.map +1 -0
- package/dist/core/api-internals/types.d.ts +25 -0
- package/dist/core/api-internals/types.d.ts.map +1 -0
- package/dist/core/api-internals/types.js +5 -0
- package/dist/core/api-internals/types.js.map +1 -0
- package/dist/core/api.d.ts +11 -0
- package/dist/core/api.d.ts.map +1 -0
- package/dist/core/api.js +11 -0
- package/dist/core/api.js.map +1 -0
- package/dist/{sync.d.ts → core/cache.d.ts} +5 -33
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +143 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/scanner-internals/ast.d.ts +22 -0
- package/dist/core/scanner-internals/ast.d.ts.map +1 -0
- package/dist/core/scanner-internals/ast.js +80 -0
- package/dist/core/scanner-internals/ast.js.map +1 -0
- package/dist/core/scanner-internals/file-walker.d.ts +9 -0
- package/dist/core/scanner-internals/file-walker.d.ts.map +1 -0
- package/dist/core/scanner-internals/file-walker.js +25 -0
- package/dist/core/scanner-internals/file-walker.js.map +1 -0
- package/dist/core/scanner-internals/import-resolver.d.ts +13 -0
- package/dist/core/scanner-internals/import-resolver.d.ts.map +1 -0
- package/dist/core/scanner-internals/import-resolver.js +124 -0
- package/dist/core/scanner-internals/import-resolver.js.map +1 -0
- package/dist/core/scanner-internals/key-extractor.d.ts +16 -0
- package/dist/core/scanner-internals/key-extractor.d.ts.map +1 -0
- package/dist/core/scanner-internals/key-extractor.js +172 -0
- package/dist/core/scanner-internals/key-extractor.js.map +1 -0
- package/dist/core/scanner-internals/route-detector.d.ts +19 -0
- package/dist/core/scanner-internals/route-detector.d.ts.map +1 -0
- package/dist/core/scanner-internals/route-detector.js +74 -0
- package/dist/core/scanner-internals/route-detector.js.map +1 -0
- package/dist/core/scanner-internals/types.d.ts +53 -0
- package/dist/core/scanner-internals/types.d.ts.map +1 -0
- package/dist/core/scanner-internals/types.js +29 -0
- package/dist/core/scanner-internals/types.js.map +1 -0
- package/dist/core/scanner.d.ts +20 -0
- package/dist/core/scanner.d.ts.map +1 -0
- package/dist/core/scanner.js +113 -0
- package/dist/core/scanner.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/preview/index.d.ts +38 -0
- package/dist/preview/index.d.ts.map +1 -0
- package/dist/preview/index.js +114 -0
- package/dist/preview/index.js.map +1 -0
- package/dist/preview/internals/highlight.d.ts +22 -0
- package/dist/preview/internals/highlight.d.ts.map +1 -0
- package/dist/preview/internals/highlight.js +153 -0
- package/dist/preview/internals/highlight.js.map +1 -0
- package/dist/preview/internals/interactions.d.ts +15 -0
- package/dist/preview/internals/interactions.d.ts.map +1 -0
- package/dist/preview/internals/interactions.js +38 -0
- package/dist/preview/internals/interactions.js.map +1 -0
- package/dist/preview/internals/locales.d.ts +9 -0
- package/dist/preview/internals/locales.d.ts.map +1 -0
- package/dist/preview/internals/locales.js +24 -0
- package/dist/preview/internals/locales.js.map +1 -0
- package/dist/preview/internals/state.d.ts +35 -0
- package/dist/preview/internals/state.d.ts.map +1 -0
- package/dist/preview/internals/state.js +65 -0
- package/dist/preview/internals/state.js.map +1 -0
- package/dist/preview/internals/styles.d.ts +8 -0
- package/dist/preview/internals/styles.d.ts.map +1 -0
- package/dist/preview/internals/styles.js +28 -0
- package/dist/preview/internals/styles.js.map +1 -0
- package/dist/preview/internals/types.d.ts +49 -0
- package/dist/preview/internals/types.d.ts.map +1 -0
- package/dist/preview/internals/types.js +5 -0
- package/dist/preview/internals/types.js.map +1 -0
- package/dist/scaffold/index.d.ts +3 -0
- package/dist/scaffold/index.d.ts.map +1 -0
- package/dist/scaffold/index.js +3 -0
- package/dist/scaffold/index.js.map +1 -0
- package/dist/scaffold/intenrals/scaffold.d.ts +7 -0
- package/dist/scaffold/intenrals/scaffold.d.ts.map +1 -0
- package/dist/scaffold/intenrals/scaffold.js +34 -0
- package/dist/scaffold/intenrals/scaffold.js.map +1 -0
- package/dist/scaffold/intenrals/templates.d.ts +10 -0
- package/dist/scaffold/intenrals/templates.d.ts.map +1 -0
- package/dist/{scaffold.js → scaffold/intenrals/templates.js} +10 -38
- package/dist/scaffold/intenrals/templates.js.map +1 -0
- package/dist/{scaffold.d.ts → scaffold/intenrals/types.d.ts} +4 -2
- package/dist/scaffold/intenrals/types.d.ts.map +1 -0
- package/dist/scaffold/intenrals/types.js +5 -0
- package/dist/scaffold/intenrals/types.js.map +1 -0
- package/package.json +7 -7
- package/schema.json +64 -0
- package/dist/cli-entry.d.ts +0 -3
- package/dist/cli-entry.d.ts.map +0 -1
- package/dist/cli-entry.js +0 -390
- package/dist/cli-entry.js.map +0 -1
- package/dist/cli.d.ts +0 -16
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -16
- package/dist/cli.js.map +0 -1
- package/dist/load-config.d.ts.map +0 -1
- package/dist/load-config.js +0 -24
- package/dist/load-config.js.map +0 -1
- package/dist/preview.d.ts +0 -88
- package/dist/preview.d.ts.map +0 -1
- package/dist/preview.js +0 -461
- package/dist/preview.js.map +0 -1
- package/dist/resolve-config.d.ts +0 -15
- package/dist/resolve-config.d.ts.map +0 -1
- package/dist/resolve-config.js.map +0 -1
- package/dist/scaffold.d.ts.map +0 -1
- package/dist/scaffold.js.map +0 -1
- package/dist/scanner.d.ts +0 -77
- package/dist/scanner.d.ts.map +0 -1
- package/dist/scanner.js +0 -555
- package/dist/scanner.js.map +0 -1
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js +0 -383
- package/dist/sync.js.map +0 -1
package/dist/cli-entry.js
DELETED
|
@@ -1,390 +0,0 @@
|
|
|
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, fetchRouteParams, } from './sync.js';
|
|
7
|
-
import { loadConfigFile } from './load-config.js';
|
|
8
|
-
import { scaffoldI18n } from './scaffold.js';
|
|
9
|
-
/**
|
|
10
|
-
* Strip line and block comments from a JSON-with-comments (JSONC) string,
|
|
11
|
-
* correctly skipping content inside string literals to avoid false positives
|
|
12
|
-
* on patterns like "@/*" or "**\/*.ts".
|
|
13
|
-
*/
|
|
14
|
-
function stripJsonComments(input) {
|
|
15
|
-
let result = '';
|
|
16
|
-
let i = 0;
|
|
17
|
-
while (i < input.length) {
|
|
18
|
-
// String literal — copy verbatim until closing quote
|
|
19
|
-
if (input[i] === '"') {
|
|
20
|
-
result += '"';
|
|
21
|
-
i++;
|
|
22
|
-
while (i < input.length) {
|
|
23
|
-
const ch = input[i];
|
|
24
|
-
result += ch;
|
|
25
|
-
i++;
|
|
26
|
-
if (ch === '\\') {
|
|
27
|
-
// Escaped character — copy next char too
|
|
28
|
-
if (i < input.length) {
|
|
29
|
-
result += input[i++];
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
else if (ch === '"') {
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
// Line comment (//)
|
|
39
|
-
if (input[i] === '/' && input[i + 1] === '/') {
|
|
40
|
-
while (i < input.length && input[i] !== '\n')
|
|
41
|
-
i++;
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
// Block comment (/* ... */)
|
|
45
|
-
if (input[i] === '/' && input[i + 1] === '*') {
|
|
46
|
-
i += 2;
|
|
47
|
-
while (i < input.length) {
|
|
48
|
-
if (input[i] === '*' && input[i + 1] === '/') {
|
|
49
|
-
i += 2;
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
i++;
|
|
53
|
-
}
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
result += input[i++];
|
|
57
|
-
}
|
|
58
|
-
return result;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Load TypeScript path mappings from tsconfig.json.
|
|
62
|
-
* Returns a mapping of alias patterns to base paths in the project.
|
|
63
|
-
*/
|
|
64
|
-
function loadTsConfigPathMappings(root) {
|
|
65
|
-
const tsconfigPath = path.join(root, 'tsconfig.json');
|
|
66
|
-
if (!fs.existsSync(tsconfigPath)) {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
try {
|
|
70
|
-
const content = fs.readFileSync(tsconfigPath, 'utf-8');
|
|
71
|
-
// Remove comments for JSON parsing, but skip content inside string literals
|
|
72
|
-
// to avoid false positives on patterns like "@/*" or "**/*.ts"
|
|
73
|
-
const cleaned = stripJsonComments(content);
|
|
74
|
-
const tsconfig = JSON.parse(cleaned);
|
|
75
|
-
if (typeof tsconfig === 'object' &&
|
|
76
|
-
tsconfig !== null &&
|
|
77
|
-
'compilerOptions' in tsconfig) {
|
|
78
|
-
const compilerOptions = tsconfig
|
|
79
|
-
.compilerOptions;
|
|
80
|
-
if (typeof compilerOptions === 'object' &&
|
|
81
|
-
compilerOptions !== null &&
|
|
82
|
-
'paths' in compilerOptions) {
|
|
83
|
-
const paths = compilerOptions
|
|
84
|
-
.paths;
|
|
85
|
-
if (typeof paths === 'object' && paths !== null) {
|
|
86
|
-
return paths;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
// Silently ignore tsconfig errors
|
|
93
|
-
}
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* sync-translations CLI
|
|
98
|
-
*
|
|
99
|
-
* Subcommands:
|
|
100
|
-
* sync (default) Scan codebase and sync translation keys to the CMS.
|
|
101
|
-
* pull Fetch translations from CMS and write local JSON files.
|
|
102
|
-
* status Show what would change on next sync (no network calls).
|
|
103
|
-
* watch Watch for file changes and auto-sync on save.
|
|
104
|
-
* init Interactive setup — creates .translationsrc.json.
|
|
105
|
-
*
|
|
106
|
-
* Usage:
|
|
107
|
-
* sync-translations # sync keys + pull
|
|
108
|
-
* sync-translations sync # same as above
|
|
109
|
-
* sync-translations sync --dry-run # preview changes only
|
|
110
|
-
* sync-translations sync --report scan.json # write JSON report
|
|
111
|
-
* sync-translations pull # pull to ./public/dictionaries
|
|
112
|
-
* sync-translations pull --output ./locales # custom output dir
|
|
113
|
-
* sync-translations pull --force # ignore TTL cache
|
|
114
|
-
* sync-translations pull --env staging # pull staging translations
|
|
115
|
-
* sync-translations pull --ttl 600000 # custom TTL (ms)
|
|
116
|
-
* sync-translations status # diff vs last sync cache
|
|
117
|
-
* sync-translations watch # watch + auto-sync
|
|
118
|
-
* sync-translations init # interactive setup
|
|
119
|
-
*
|
|
120
|
-
* Or configure via .env.local / .translationsrc.json:
|
|
121
|
-
* NEXT_PUBLIC_CMS_PROJECT_ID=abc123
|
|
122
|
-
* CMS_SYNC_API_KEY=secret
|
|
123
|
-
* NEXT_PUBLIC_CMS_URL=https://cms.example.com
|
|
124
|
-
*/
|
|
125
|
-
const SUBCOMMANDS = new Set(['sync', 'pull', 'status', 'watch', 'init']);
|
|
126
|
-
// ---------------------------------------------------------------------------
|
|
127
|
-
// Arg helpers
|
|
128
|
-
// ---------------------------------------------------------------------------
|
|
129
|
-
function getFlag(args, flag) {
|
|
130
|
-
const idx = args.indexOf(flag);
|
|
131
|
-
return idx !== -1 && args[idx + 1] ? args[idx + 1] : undefined;
|
|
132
|
-
}
|
|
133
|
-
function hasFlag(args, ...flags) {
|
|
134
|
-
return flags.some(f => args.includes(f));
|
|
135
|
-
}
|
|
136
|
-
// ---------------------------------------------------------------------------
|
|
137
|
-
// status subcommand
|
|
138
|
-
// ---------------------------------------------------------------------------
|
|
139
|
-
function runStatus(root, scanOpts) {
|
|
140
|
-
console.log(`Scanning project: ${root}`);
|
|
141
|
-
const namespaces = scanProject(root, scanOpts);
|
|
142
|
-
const { serialized, totalKeys } = serializeNamespaces(namespaces);
|
|
143
|
-
const namespaceCount = Object.keys(serialized).length;
|
|
144
|
-
console.log(`\nFound ${totalKeys} key(s) across ${namespaceCount} namespace(s): ${Object.keys(serialized).join(', ')}`);
|
|
145
|
-
const cached = loadSyncCache(root);
|
|
146
|
-
if (!cached) {
|
|
147
|
-
console.log('\nNo sync cache found (.cms-sync-cache.json). Run sync first to establish a baseline.');
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const diff = computeDiff(serialized, cached);
|
|
151
|
-
console.log('\nStatus vs last sync:');
|
|
152
|
-
console.log(` + ${diff.added.length} new key(s)`);
|
|
153
|
-
console.log(` - ${diff.removed.length} removed key(s)`);
|
|
154
|
-
console.log(` ~ ${diff.routesChanged.length} route update(s)`);
|
|
155
|
-
console.log(` = ${diff.unchanged} unchanged`);
|
|
156
|
-
if (diff.added.length > 0) {
|
|
157
|
-
console.log('\nNew keys:');
|
|
158
|
-
for (const { namespace, key, routes } of diff.added) {
|
|
159
|
-
console.log(` + ${namespace}:${key} (${formatPreviewRoutes(routes)})`);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (diff.removed.length > 0) {
|
|
163
|
-
console.log('\nRemoved keys:');
|
|
164
|
-
for (const { namespace, key } of diff.removed) {
|
|
165
|
-
console.log(` - ${namespace}:${key}`);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
if (diff.routesChanged.length > 0) {
|
|
169
|
-
console.log('\nRoute updates:');
|
|
170
|
-
for (const { namespace, key, before, after } of diff.routesChanged) {
|
|
171
|
-
console.log(` ~ ${namespace}:${key} [${formatPreviewRoutes(before)}] -> [${formatPreviewRoutes(after)}]`);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
const total = diff.added.length + diff.removed.length + diff.routesChanged.length;
|
|
175
|
-
if (total > 0) {
|
|
176
|
-
console.log('\nRun "sync-translations sync" to push these changes.');
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
console.log('\nEverything is in sync.');
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
// ---------------------------------------------------------------------------
|
|
183
|
-
// watch subcommand
|
|
184
|
-
// ---------------------------------------------------------------------------
|
|
185
|
-
async function runWatch(root, config, outputDir, scanOpts) {
|
|
186
|
-
console.log(`[watch] Watching ${root} for changes...`);
|
|
187
|
-
console.log('[watch] Press Ctrl+C to stop.\n');
|
|
188
|
-
const sourceExtensions = new Set(scanOpts.sourceExtensions ?? ['.ts', '.tsx', '.js', '.jsx']);
|
|
189
|
-
let debounce = null;
|
|
190
|
-
let running = false;
|
|
191
|
-
const runSync = async () => {
|
|
192
|
-
if (running)
|
|
193
|
-
return;
|
|
194
|
-
running = true;
|
|
195
|
-
try {
|
|
196
|
-
const namespaces = scanProject(root, scanOpts);
|
|
197
|
-
await postToSync(config, namespaces, { root, force: true });
|
|
198
|
-
await pullTranslations(config, { outputDir, force: true });
|
|
199
|
-
}
|
|
200
|
-
catch (err) {
|
|
201
|
-
console.error('[watch] Sync error:', err instanceof Error ? err.message : String(err));
|
|
202
|
-
}
|
|
203
|
-
finally {
|
|
204
|
-
running = false;
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
// Initial sync on start
|
|
208
|
-
await runSync();
|
|
209
|
-
// Recursively watch for file changes
|
|
210
|
-
const watcher = fs.watch(root, { recursive: true }, (_evt, filename) => {
|
|
211
|
-
if (!filename)
|
|
212
|
-
return;
|
|
213
|
-
const ext = path.extname(filename);
|
|
214
|
-
if (!sourceExtensions.has(ext))
|
|
215
|
-
return;
|
|
216
|
-
if (debounce)
|
|
217
|
-
clearTimeout(debounce);
|
|
218
|
-
debounce = setTimeout(() => {
|
|
219
|
-
console.log(`[watch] Change detected: ${filename}`);
|
|
220
|
-
void runSync();
|
|
221
|
-
}, 500);
|
|
222
|
-
});
|
|
223
|
-
process.on('SIGINT', () => {
|
|
224
|
-
watcher.close();
|
|
225
|
-
console.log('\n[watch] Stopped.');
|
|
226
|
-
process.exit(0);
|
|
227
|
-
});
|
|
228
|
-
// Keep the process alive
|
|
229
|
-
await new Promise(() => undefined);
|
|
230
|
-
}
|
|
231
|
-
// ---------------------------------------------------------------------------
|
|
232
|
-
// init subcommand
|
|
233
|
-
// ---------------------------------------------------------------------------
|
|
234
|
-
async function runInit(root) {
|
|
235
|
-
const { createInterface } = await import('readline');
|
|
236
|
-
const rl = createInterface({
|
|
237
|
-
input: process.stdin,
|
|
238
|
-
output: process.stdout,
|
|
239
|
-
});
|
|
240
|
-
const question = (prompt) => new Promise(resolve => rl.question(prompt, resolve));
|
|
241
|
-
console.log('sync-translations init\n');
|
|
242
|
-
console.log('This creates .translationsrc.json in your project root.');
|
|
243
|
-
console.log('Values here override env vars for the sync-translations CLI.\n');
|
|
244
|
-
const cmsUrl = await question('CMS URL (e.g. https://cms.example.com): ');
|
|
245
|
-
const projectId = await question('Project ID: ');
|
|
246
|
-
const apiKey = await question('API key: ');
|
|
247
|
-
const i18nDirInput = await question('i18n directory [./src/lib/i18n]: ');
|
|
248
|
-
const pullTtlInput = await question('Pull TTL in seconds [300]: ');
|
|
249
|
-
const scaffoldInput = await question('Scaffold i18n files (settings, client, server, provider)? [Y/n]: ');
|
|
250
|
-
rl.close();
|
|
251
|
-
const i18nDir = i18nDirInput.trim() || './src/lib/i18n';
|
|
252
|
-
const outputDir = `${i18nDir.replace(/\/$/, '')}/dictionaries`;
|
|
253
|
-
const config = {};
|
|
254
|
-
if (cmsUrl.trim())
|
|
255
|
-
config['cmsUrl'] = cmsUrl.trim();
|
|
256
|
-
if (projectId.trim())
|
|
257
|
-
config['projectId'] = projectId.trim();
|
|
258
|
-
if (apiKey.trim())
|
|
259
|
-
config['apiKey'] = apiKey.trim();
|
|
260
|
-
config['outputDir'] = outputDir;
|
|
261
|
-
if (pullTtlInput.trim()) {
|
|
262
|
-
const ttlSec = parseInt(pullTtlInput.trim(), 10);
|
|
263
|
-
if (!isNaN(ttlSec))
|
|
264
|
-
config['pullTtlMs'] = ttlSec * 1000;
|
|
265
|
-
}
|
|
266
|
-
const configPath = path.join(root, '.translationsrc.json');
|
|
267
|
-
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
268
|
-
console.log(`\nCreated: ${configPath}`);
|
|
269
|
-
if (config['apiKey']) {
|
|
270
|
-
console.log('\nWarning: .translationsrc.json contains an API key. Consider adding it to .gitignore:');
|
|
271
|
-
console.log(' echo ".translationsrc.json" >> .gitignore');
|
|
272
|
-
console.log('Or move the API key to CMS_SYNC_API_KEY in .env.local instead.');
|
|
273
|
-
}
|
|
274
|
-
const doScaffold = scaffoldInput.trim().toLowerCase() !== 'n';
|
|
275
|
-
if (doScaffold) {
|
|
276
|
-
const absI18nDir = path.isAbsolute(i18nDir)
|
|
277
|
-
? i18nDir
|
|
278
|
-
: path.resolve(root, i18nDir);
|
|
279
|
-
const { written, skipped } = scaffoldI18n({ i18nDir: absI18nDir });
|
|
280
|
-
if (written.length > 0) {
|
|
281
|
-
console.log('\nScaffolded i18n files:');
|
|
282
|
-
for (const f of written)
|
|
283
|
-
console.log(` + src/lib/i18n/${f}`);
|
|
284
|
-
}
|
|
285
|
-
if (skipped.length > 0) {
|
|
286
|
-
console.log('\nSkipped (already exist):');
|
|
287
|
-
for (const f of skipped)
|
|
288
|
-
console.log(` ~ src/lib/i18n/${f}`);
|
|
289
|
-
}
|
|
290
|
-
console.log('\nNext steps:');
|
|
291
|
-
console.log(' 1. Install peer deps: pnpm add i18next react-i18next i18next-resources-to-backend');
|
|
292
|
-
console.log(' 2. Pull translations: sync-translations pull');
|
|
293
|
-
console.log(' 3. Wrap your root layout with <TranslationProvider locale={locale}>');
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
// ---------------------------------------------------------------------------
|
|
297
|
-
// main
|
|
298
|
-
// ---------------------------------------------------------------------------
|
|
299
|
-
async function main() {
|
|
300
|
-
const args = process.argv.slice(2);
|
|
301
|
-
// Detect subcommand (first non-flag arg)
|
|
302
|
-
const subcommand = args.find(a => !a.startsWith('-')) ?? 'sync';
|
|
303
|
-
if (!SUBCOMMANDS.has(subcommand)) {
|
|
304
|
-
console.error(`Unknown subcommand: ${subcommand}`);
|
|
305
|
-
console.error(`Available subcommands: ${[...SUBCOMMANDS].join(', ')}`);
|
|
306
|
-
process.exit(1);
|
|
307
|
-
}
|
|
308
|
-
const root = findProjectRoot();
|
|
309
|
-
const fileConfig = loadConfigFile(root);
|
|
310
|
-
// init doesn't need a resolved Config
|
|
311
|
-
if (subcommand === 'init') {
|
|
312
|
-
await runInit(root);
|
|
313
|
-
return;
|
|
314
|
-
}
|
|
315
|
-
const config = resolveConfig(root, fileConfig);
|
|
316
|
-
// Build scan options from config file, enriched with CMS route config.
|
|
317
|
-
// For status/watch/sync, we fetch the project's preview_route_config from the CMS
|
|
318
|
-
// so clients don't need to hardcode routeParams in .translationsrc.json.
|
|
319
|
-
// Local fileConfig.routeParams takes precedence over CMS routes (acts as override).
|
|
320
|
-
const pathMappings = loadTsConfigPathMappings(root);
|
|
321
|
-
let cmsRouteParams = {};
|
|
322
|
-
if (subcommand !== 'pull') {
|
|
323
|
-
cmsRouteParams = await fetchRouteParams(config);
|
|
324
|
-
}
|
|
325
|
-
const scanOpts = {
|
|
326
|
-
excludedDirs: fileConfig.excludedDirs,
|
|
327
|
-
sourceExtensions: fileConfig.sourceExtensions,
|
|
328
|
-
reservedCssNamespaces: fileConfig.reservedCssNamespaces,
|
|
329
|
-
// CMS routes as base, local config overrides per-route
|
|
330
|
-
routeParams: { ...cmsRouteParams, ...(fileConfig.routeParams ?? {}) },
|
|
331
|
-
pathMappings: pathMappings ?? undefined,
|
|
332
|
-
projectRoot: root,
|
|
333
|
-
};
|
|
334
|
-
// ---- status -------------------------------------------------------------
|
|
335
|
-
if (subcommand === 'status') {
|
|
336
|
-
runStatus(root, scanOpts);
|
|
337
|
-
return;
|
|
338
|
-
}
|
|
339
|
-
// ---- watch --------------------------------------------------------------
|
|
340
|
-
if (subcommand === 'watch') {
|
|
341
|
-
const outputDir = fileConfig.outputDir ?? path.join(root, 'public', 'locales');
|
|
342
|
-
await runWatch(root, config, outputDir, scanOpts);
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
// ---- pull ---------------------------------------------------------------
|
|
346
|
-
if (subcommand === 'pull') {
|
|
347
|
-
const outputArg = getFlag(args, '--output');
|
|
348
|
-
const outputDir = outputArg
|
|
349
|
-
? path.resolve(root, outputArg)
|
|
350
|
-
: fileConfig.outputDir
|
|
351
|
-
? path.resolve(root, fileConfig.outputDir)
|
|
352
|
-
: path.join(root, 'public', 'locales');
|
|
353
|
-
const ttlArg = getFlag(args, '--ttl');
|
|
354
|
-
const ttlMs = ttlArg ? parseInt(ttlArg, 10) : fileConfig.pullTtlMs;
|
|
355
|
-
await pullTranslations(config, {
|
|
356
|
-
outputDir,
|
|
357
|
-
force: hasFlag(args, '--force'),
|
|
358
|
-
ttlMs,
|
|
359
|
-
env: getFlag(args, '--env'),
|
|
360
|
-
});
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
// ---- sync (default) + optional pull afterwards --------------------------
|
|
364
|
-
const dryRun = hasFlag(args, '--dry-run');
|
|
365
|
-
const force = hasFlag(args, '--force');
|
|
366
|
-
const reportArg = getFlag(args, '--report');
|
|
367
|
-
const reportPath = reportArg
|
|
368
|
-
? path.isAbsolute(reportArg)
|
|
369
|
-
? reportArg
|
|
370
|
-
: path.join(root, reportArg)
|
|
371
|
-
: undefined;
|
|
372
|
-
const outputDir = fileConfig.outputDir ?? path.join(root, 'public', 'locales');
|
|
373
|
-
console.log(`Scanning project: ${root}`);
|
|
374
|
-
const namespaces = scanProject(root, scanOpts);
|
|
375
|
-
await postToSync(config, namespaces, {
|
|
376
|
-
root,
|
|
377
|
-
force,
|
|
378
|
-
dryRun,
|
|
379
|
-
reportPath,
|
|
380
|
-
});
|
|
381
|
-
// Skip pull when dry-running — there's nothing to pull yet
|
|
382
|
-
if (!dryRun) {
|
|
383
|
-
await pullTranslations(config, { outputDir, force });
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
main().catch(err => {
|
|
387
|
-
console.error(err);
|
|
388
|
-
process.exit(1);
|
|
389
|
-
});
|
|
390
|
-
//# sourceMappingURL=cli-entry.js.map
|
package/dist/cli-entry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
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, fetchRouteParams, } from './sync.js';
|
|
16
|
-
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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,EAChB,gBAAgB,GACnB,MAAM,WAAW,CAAC"}
|
package/dist/cli.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
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 { 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, fetchRouteParams, } from './sync.js';
|
|
16
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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,EAChB,gBAAgB,GACnB,MAAM,WAAW,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../src/load-config.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjC;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAqB/D"}
|
package/dist/load-config.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
const CONFIG_FILENAMES = ['.translationsrc.json', 'translations.config.json'];
|
|
4
|
-
/**
|
|
5
|
-
* Load project-level config from .translationsrc.json or translations.config.json.
|
|
6
|
-
* Returns an empty object when no config file is found — never throws.
|
|
7
|
-
*/
|
|
8
|
-
export function loadConfigFile(root) {
|
|
9
|
-
for (const filename of CONFIG_FILENAMES) {
|
|
10
|
-
const filePath = path.join(root, filename);
|
|
11
|
-
if (!fs.existsSync(filePath))
|
|
12
|
-
continue;
|
|
13
|
-
try {
|
|
14
|
-
const parsed = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
15
|
-
console.log(`[config] Loaded config from ${filename}`);
|
|
16
|
-
return parsed;
|
|
17
|
-
}
|
|
18
|
-
catch (err) {
|
|
19
|
-
console.warn(`[config] Failed to parse ${filename}: ${err instanceof Error ? err.message : String(err)}`);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return {};
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=load-config.js.map
|
package/dist/load-config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["../src/load-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AA8ExB,MAAM,gBAAgB,GAAG,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,CAAC;AAE9E;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACvC,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QAEvC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACrB,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CACf,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;YACvD,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CACR,4BAA4B,QAAQ,KAChC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACnD,EAAE,CACL,CAAC;QACN,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC"}
|
package/dist/preview.d.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Translation CMS — Preview Listener
|
|
3
|
-
*
|
|
4
|
-
* Add this to your client app in development mode to enable live in-context
|
|
5
|
-
* preview of translations from the CMS.
|
|
6
|
-
*
|
|
7
|
-
* Usage in Next.js:
|
|
8
|
-
* ```tsx
|
|
9
|
-
* import { initPreviewListener } from '@translation-cms/sync/preview';
|
|
10
|
-
*
|
|
11
|
-
* // In a useEffect or root layout (development only)
|
|
12
|
-
* if (process.env.NODE_ENV === 'development') {
|
|
13
|
-
* initPreviewListener();
|
|
14
|
-
* }
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* Precise highlighting (recommended):
|
|
18
|
-
* Add `data-cms-key="namespace:key"` to elements that render a translation.
|
|
19
|
-
* The listener will target those elements directly, bypassing text-search heuristics.
|
|
20
|
-
* ```tsx
|
|
21
|
-
* <h1 data-cms-key="blog:post.title">{t('blog:post.title')}</h1>
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
/** Callback invoked when an action is triggered by the CMS. */
|
|
25
|
-
type PreviewActionCallback = () => void | Promise<void>;
|
|
26
|
-
export interface PreviewListenerOptions {
|
|
27
|
-
/**
|
|
28
|
-
* Custom CSS to apply to highlighted elements.
|
|
29
|
-
* If not provided, uses default blue outline.
|
|
30
|
-
*/
|
|
31
|
-
highlightStyles?: {
|
|
32
|
-
outline?: string;
|
|
33
|
-
outlineOffset?: string;
|
|
34
|
-
borderRadius?: string;
|
|
35
|
-
backgroundColor?: string;
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Called when the CMS requests a locale switch.
|
|
39
|
-
* Use this to integrate with your i18n library:
|
|
40
|
-
*
|
|
41
|
-
* ```ts
|
|
42
|
-
* initPreviewListener({
|
|
43
|
-
* onLocaleSwitch: (locale) => i18n.changeLanguage(locale),
|
|
44
|
-
* });
|
|
45
|
-
* ```
|
|
46
|
-
*
|
|
47
|
-
* When omitted, the listener looks for `window.__cmsSetLocale(locale)`.
|
|
48
|
-
*/
|
|
49
|
-
onLocaleSwitch?: (locale: string) => void;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Initialize the preview listener.
|
|
53
|
-
* Safe to call multiple times — only initialises once.
|
|
54
|
-
*/
|
|
55
|
-
export declare function initPreviewListener(options?: PreviewListenerOptions): void;
|
|
56
|
-
/** Remove the preview listener and clear all highlights. */
|
|
57
|
-
export declare function cleanupPreviewListener(): void;
|
|
58
|
-
/**
|
|
59
|
-
* Register an action that can be triggered by the CMS.
|
|
60
|
-
* Useful for opening dialogs, menus, or other UI interactions.
|
|
61
|
-
*
|
|
62
|
-
* Usage in your app:
|
|
63
|
-
* ```tsx
|
|
64
|
-
* import { registerPreviewAction } from '@translation-cms/sync';
|
|
65
|
-
*
|
|
66
|
-
* function MyDialog() {
|
|
67
|
-
* const [open, setOpen] = useState(false);
|
|
68
|
-
*
|
|
69
|
-
* useEffect(() => {
|
|
70
|
-
* if (process.env.NODE_ENV === 'development') {
|
|
71
|
-
* registerPreviewAction('nav.menu', () => setOpen(true));
|
|
72
|
-
* }
|
|
73
|
-
* }, []);
|
|
74
|
-
*
|
|
75
|
-
* return <Dialog open={open} onOpenChange={setOpen}>...</Dialog>;
|
|
76
|
-
* }
|
|
77
|
-
* ```
|
|
78
|
-
*
|
|
79
|
-
* When the editor clicks "Show in app" in the CMS for a key inside this menu,
|
|
80
|
-
* the CMS notifies the preview and this callback is triggered.
|
|
81
|
-
*/
|
|
82
|
-
export declare function registerPreviewAction(actionId: string, callback: PreviewActionCallback): void;
|
|
83
|
-
/**
|
|
84
|
-
* Unregister a previously registered action.
|
|
85
|
-
*/
|
|
86
|
-
export declare function unregisterPreviewAction(actionId: string): void;
|
|
87
|
-
export {};
|
|
88
|
-
//# sourceMappingURL=preview.d.ts.map
|
package/dist/preview.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AA2CH,+DAA+D;AAC/D,KAAK,qBAAqB,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACnC;;;OAGG;IACH,eAAe,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAyBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAkC1E;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,IAAI,IAAI,CAa7C;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,qBAAqB,GAChC,IAAI,CAGN;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAG9D"}
|