@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/scanner.js
DELETED
|
@@ -1,555 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
// Defaults (overridable via ScanOptions)
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
export const DEFAULT_EXCLUDED_DIRS = new Set([
|
|
7
|
-
'node_modules',
|
|
8
|
-
'.next',
|
|
9
|
-
'dist',
|
|
10
|
-
'.git',
|
|
11
|
-
'out',
|
|
12
|
-
'.turbo',
|
|
13
|
-
'scripts',
|
|
14
|
-
'packages',
|
|
15
|
-
'.storybook',
|
|
16
|
-
'coverage',
|
|
17
|
-
]);
|
|
18
|
-
export const DEFAULT_SOURCE_EXTENSIONS = new Set([
|
|
19
|
-
'.ts',
|
|
20
|
-
'.tsx',
|
|
21
|
-
'.js',
|
|
22
|
-
'.jsx',
|
|
23
|
-
]);
|
|
24
|
-
export const DEFAULT_RESERVED_CSS_NAMESPACES = new Set([
|
|
25
|
-
'hover',
|
|
26
|
-
'focus',
|
|
27
|
-
'active',
|
|
28
|
-
'group',
|
|
29
|
-
'supports',
|
|
30
|
-
'peer',
|
|
31
|
-
'lg',
|
|
32
|
-
'md',
|
|
33
|
-
'sm',
|
|
34
|
-
'xl',
|
|
35
|
-
'2xl',
|
|
36
|
-
'dark',
|
|
37
|
-
'localhost',
|
|
38
|
-
'http',
|
|
39
|
-
'https',
|
|
40
|
-
'ftp',
|
|
41
|
-
'blob',
|
|
42
|
-
'file',
|
|
43
|
-
'data',
|
|
44
|
-
'mailto',
|
|
45
|
-
'tel',
|
|
46
|
-
'vscode',
|
|
47
|
-
'slack',
|
|
48
|
-
'urn',
|
|
49
|
-
'ws',
|
|
50
|
-
'wss',
|
|
51
|
-
]);
|
|
52
|
-
/** Return the route string key used for deduplication. */
|
|
53
|
-
export function routeKey(r) {
|
|
54
|
-
return typeof r === 'string' ? r : r.route;
|
|
55
|
-
}
|
|
56
|
-
// ---------------------------------------------------------------------------
|
|
57
|
-
// Regexes
|
|
58
|
-
// ---------------------------------------------------------------------------
|
|
59
|
-
const GET_TRANSLATIONS_RE = /(?:const|let|var)\s+(\w+)\s*=\s*await\s+\w+\.(?:getTranslations(?:WithFallback)?|getT)\s*\([^,]+,\s*['"`]([a-zA-Z0-9_-]+)['"`]/g;
|
|
60
|
-
const GET_TRANSLATIONS_ARRAY_RE = /(?:const|let|var)\s+(\w+)\s*=\s*await\s+\w+\.(?:getTranslations(?:WithFallback)?|getT)\s*\([^,]+,\s*(\[[\s\S]*?\])\s*\)/g;
|
|
61
|
-
function buildFunctionCallRE(varName) {
|
|
62
|
-
return new RegExp(`\\b${varName}\\(['"\`]([a-zA-Z0-9_./-]+)['"\`]\\)`, 'g');
|
|
63
|
-
}
|
|
64
|
-
function buildBracketAccessRE(varName) {
|
|
65
|
-
return new RegExp(`\\b${varName}\\[['"\`]([a-zA-Z0-9_./-]+)['"\`]\\]`, 'g');
|
|
66
|
-
}
|
|
67
|
-
const USE_TRANSLATION_RE = /(?:useTranslation|getTranslation)\(\s*['"`]([a-zA-Z0-9_-]+)['"`]/g;
|
|
68
|
-
/** t('namespace:key') — react-i18next */
|
|
69
|
-
const T_WITH_NAMESPACE_RE = /\bt\(\s*['"`]([a-zA-Z][a-zA-Z0-9_]*:[a-zA-Z0-9_./-]+)['"`]/g;
|
|
70
|
-
/** t('key') — react-i18next (bare, deprecated) */
|
|
71
|
-
const T_WITHOUT_NAMESPACE_RE = /\bt\(\s*['"`]([a-zA-Z0-9_./-]+)['"`]/g;
|
|
72
|
-
/** dot-notation standalone keys — legacy, triggers warning */
|
|
73
|
-
const STANDALONE_TRANSLATION_KEYS_RE = /(?::\s*|=\s*|\[\s*)['"`]([a-z0-9_]*_[a-z0-9_./-]*(?:\.[a-z0-9_.-]+)+)['"`]/g;
|
|
74
|
-
/** namespace:key standalone keys */
|
|
75
|
-
const STANDALONE_NAMESPACED_KEYS_RE = /(?::\s*|=\s*|\[\s*)['"` ]([a-zA-Z][a-zA-Z0-9_]*:[a-zA-Z0-9_./-]+)['"`]/g;
|
|
76
|
-
/**
|
|
77
|
-
* <Trans i18nKey="namespace:key"> and <Trans i18nKey={'namespace:key'}>
|
|
78
|
-
* Works across multiple lines (non-greedy, [^>] matches newlines).
|
|
79
|
-
*/
|
|
80
|
-
const TRANS_I18N_KEY_RE = /\bTrans\b[^>]*?\bi18nKey\s*=\s*(?:\{?\s*['"`])([a-zA-Z][a-zA-Z0-9_]*:[a-zA-Z0-9_./-]+)['"`]/g;
|
|
81
|
-
// ---------------------------------------------------------------------------
|
|
82
|
-
// Comment stripping
|
|
83
|
-
// ---------------------------------------------------------------------------
|
|
84
|
-
function removeComments(content) {
|
|
85
|
-
let result = '';
|
|
86
|
-
let i = 0;
|
|
87
|
-
while (i < content.length) {
|
|
88
|
-
const char = content[i];
|
|
89
|
-
const next = content[i + 1];
|
|
90
|
-
if (char === '"' || char === "'" || char === '`') {
|
|
91
|
-
const q = char;
|
|
92
|
-
result += char;
|
|
93
|
-
i++;
|
|
94
|
-
while (i < content.length) {
|
|
95
|
-
if (content[i] === q && content[i - 1] !== '\\') {
|
|
96
|
-
result += content[i++];
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
result += content[i++];
|
|
100
|
-
}
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
if (char === '/' && next === '/') {
|
|
104
|
-
while (i < content.length && content[i] !== '\n')
|
|
105
|
-
i++;
|
|
106
|
-
result += '\n';
|
|
107
|
-
i++;
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
if (char === '/' && next === '*') {
|
|
111
|
-
i += 2;
|
|
112
|
-
while (i < content.length) {
|
|
113
|
-
if (content[i] === '*' && content[i + 1] === '/') {
|
|
114
|
-
i += 2;
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
result += content[i] === '\n' ? '\n' : ' ';
|
|
118
|
-
i++;
|
|
119
|
-
}
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
result += char;
|
|
123
|
-
i++;
|
|
124
|
-
}
|
|
125
|
-
return result;
|
|
126
|
-
}
|
|
127
|
-
// ---------------------------------------------------------------------------
|
|
128
|
-
// File walking
|
|
129
|
-
// ---------------------------------------------------------------------------
|
|
130
|
-
export function* walkFiles(dir, excludedDirs, sourceExtensions) {
|
|
131
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
132
|
-
for (const entry of entries) {
|
|
133
|
-
if (entry.isDirectory()) {
|
|
134
|
-
if (excludedDirs.has(entry.name))
|
|
135
|
-
continue;
|
|
136
|
-
yield* walkFiles(path.join(dir, entry.name), excludedDirs, sourceExtensions);
|
|
137
|
-
}
|
|
138
|
-
else if (entry.isFile()) {
|
|
139
|
-
if (sourceExtensions.has(path.extname(entry.name))) {
|
|
140
|
-
yield path.join(dir, entry.name);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
// ---------------------------------------------------------------------------
|
|
146
|
-
// Route detection
|
|
147
|
-
// ---------------------------------------------------------------------------
|
|
148
|
-
/**
|
|
149
|
-
* Returns true when a page file only calls redirect() without rendering any JSX.
|
|
150
|
-
* Such pages are skipped from the preview route list because they have no UI to preview.
|
|
151
|
-
*/
|
|
152
|
-
export function isRedirectOnlyPage(filePath) {
|
|
153
|
-
let content;
|
|
154
|
-
try {
|
|
155
|
-
content = fs.readFileSync(filePath, 'utf-8');
|
|
156
|
-
}
|
|
157
|
-
catch {
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
const cleaned = removeComments(content);
|
|
161
|
-
// Must call redirect(
|
|
162
|
-
if (!/\bredirect\(/.test(cleaned))
|
|
163
|
-
return false;
|
|
164
|
-
// If there is a JSX return (e.g. `return (<Foo` or `return <Foo`) it renders UI
|
|
165
|
-
if (/return\s*\(\s*</.test(cleaned) || /return\s+<[A-Za-z]/.test(cleaned)) {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
return true;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Maps a source file path to Next.js route string(s).
|
|
172
|
-
* - page.tsx → the route template it represents (e.g. /blog/[slug], /[locale]/about)
|
|
173
|
-
* - layout.tsx → the route template of its directory
|
|
174
|
-
* - Dynamic segments are kept as-is — resolved at preview time via project preview_params
|
|
175
|
-
* - Redirect-only pages (no JSX, just redirect()) → []
|
|
176
|
-
* - All other files (components, hooks, …) → []
|
|
177
|
-
*/
|
|
178
|
-
export function filePathToRoute(root, filePath) {
|
|
179
|
-
const base = path.basename(filePath, path.extname(filePath));
|
|
180
|
-
if (base !== 'page')
|
|
181
|
-
return [];
|
|
182
|
-
// Skip pages that only redirect — no UI to preview
|
|
183
|
-
if (isRedirectOnlyPage(filePath))
|
|
184
|
-
return [];
|
|
185
|
-
const rel = path.relative(root, filePath).replace(/\\/g, '/');
|
|
186
|
-
const appMatch = rel.match(/^(?:src\/)?app\/(.*?)page\.[jt]sx?$/);
|
|
187
|
-
if (!appMatch)
|
|
188
|
-
return [];
|
|
189
|
-
let routePath = appMatch[1] ?? '';
|
|
190
|
-
routePath = routePath.replace(/\([^)]+\)\//g, ''); // strip route groups
|
|
191
|
-
routePath = routePath.replace(/\/$/, ''); // strip trailing slash
|
|
192
|
-
return ['/' + routePath];
|
|
193
|
-
}
|
|
194
|
-
// ---------------------------------------------------------------------------
|
|
195
|
-
// Key extraction
|
|
196
|
-
// ---------------------------------------------------------------------------
|
|
197
|
-
function addKey(map, namespace, key, routes) {
|
|
198
|
-
// Skip keys that look like URL paths or are suspiciously short/numeric
|
|
199
|
-
if (key.startsWith('/') || key.startsWith('.') || /^\d+$/.test(key))
|
|
200
|
-
return;
|
|
201
|
-
if (!map[namespace])
|
|
202
|
-
map[namespace] = new Map();
|
|
203
|
-
const existing = map[namespace].get(key) ?? [];
|
|
204
|
-
if (routes.length > 0) {
|
|
205
|
-
// Add each route if it doesn't already exist
|
|
206
|
-
const merged = new Set(existing);
|
|
207
|
-
for (const route of routes) {
|
|
208
|
-
merged.add(route);
|
|
209
|
-
}
|
|
210
|
-
map[namespace].set(key, Array.from(merged));
|
|
211
|
-
}
|
|
212
|
-
else if (existing.length === 0) {
|
|
213
|
-
map[namespace].set(key, []);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
export function extractKeysFromFile(filePath, routes, result, additionalReservedCssNamespaces) {
|
|
217
|
-
const fileContent = fs.readFileSync(filePath, 'utf-8');
|
|
218
|
-
const content = removeComments(fileContent);
|
|
219
|
-
const reservedNs = additionalReservedCssNamespaces?.length
|
|
220
|
-
? new Set([
|
|
221
|
-
...DEFAULT_RESERVED_CSS_NAMESPACES,
|
|
222
|
-
...additionalReservedCssNamespaces,
|
|
223
|
-
])
|
|
224
|
-
: DEFAULT_RESERVED_CSS_NAMESPACES;
|
|
225
|
-
// --- Pattern 1: CMS client style ---
|
|
226
|
-
// const t = await client.getTranslations(locale, "ns") → t("key")
|
|
227
|
-
// const t = await client.getTranslations(locale, ["ns1","ns2"]) → t("key")
|
|
228
|
-
const varToNamespace = new Map();
|
|
229
|
-
const varToNamespaces = new Map();
|
|
230
|
-
for (const m of content.matchAll(GET_TRANSLATIONS_RE)) {
|
|
231
|
-
if (m[1] && m[2])
|
|
232
|
-
varToNamespace.set(m[1], m[2]);
|
|
233
|
-
}
|
|
234
|
-
for (const m of content.matchAll(GET_TRANSLATIONS_ARRAY_RE)) {
|
|
235
|
-
if (m[1] && m[2]) {
|
|
236
|
-
const namespaces = [];
|
|
237
|
-
for (const ns of m[2].matchAll(/['"`]([a-zA-Z0-9_-]+)['"`]/g)) {
|
|
238
|
-
if (ns[1])
|
|
239
|
-
namespaces.push(ns[1]);
|
|
240
|
-
}
|
|
241
|
-
if (namespaces.length)
|
|
242
|
-
varToNamespaces.set(m[1], namespaces);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
for (const [varName, namespace] of varToNamespace) {
|
|
246
|
-
for (const m of content.matchAll(buildFunctionCallRE(varName))) {
|
|
247
|
-
if (m[1]) {
|
|
248
|
-
addKey(result, namespace, m[1], routes);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
for (const m of content.matchAll(buildBracketAccessRE(varName))) {
|
|
252
|
-
if (m[1]) {
|
|
253
|
-
addKey(result, namespace, m[1], routes);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
for (const [varName, namespaces] of varToNamespaces) {
|
|
258
|
-
for (const m of content.matchAll(buildFunctionCallRE(varName))) {
|
|
259
|
-
if (m[1]) {
|
|
260
|
-
for (const ns of namespaces) {
|
|
261
|
-
addKey(result, ns, m[1], routes);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
for (const m of content.matchAll(buildBracketAccessRE(varName))) {
|
|
266
|
-
if (m[1]) {
|
|
267
|
-
for (const ns of namespaces) {
|
|
268
|
-
addKey(result, ns, m[1], routes);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
// --- Pattern 2: react-i18next useTranslation + t() ---
|
|
274
|
-
// Only allow keys for namespaces that are used with useTranslation in this file
|
|
275
|
-
const fileNamespaces = [];
|
|
276
|
-
for (const m of content.matchAll(USE_TRANSLATION_RE)) {
|
|
277
|
-
if (m[1])
|
|
278
|
-
fileNamespaces.push(m[1]);
|
|
279
|
-
}
|
|
280
|
-
// Collect all namespaced keys found in the file
|
|
281
|
-
const namespacedKeys = new Set([...content.matchAll(T_WITH_NAMESPACE_RE)]
|
|
282
|
-
.map(m => m[1])
|
|
283
|
-
.filter((k) => !!k));
|
|
284
|
-
// Always register namespaced keys — namespace is explicit in the key
|
|
285
|
-
for (const m of content.matchAll(T_WITH_NAMESPACE_RE)) {
|
|
286
|
-
if (!m[1])
|
|
287
|
-
continue;
|
|
288
|
-
const colon = m[1].indexOf(':');
|
|
289
|
-
const ns = m[1].slice(0, colon);
|
|
290
|
-
if (!reservedNs.has(ns)) {
|
|
291
|
-
addKey(result, ns, m[1].slice(colon + 1), routes);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
for (const m of content.matchAll(T_WITHOUT_NAMESPACE_RE)) {
|
|
295
|
-
const raw = m[1];
|
|
296
|
-
if (!raw || namespacedKeys.has(raw) || raw.includes(':'))
|
|
297
|
-
continue;
|
|
298
|
-
console.warn(`[WARN] Bare key in ${path.relative(process.cwd(), filePath)}: t('${raw}') — use t('namespace:${raw}') instead`);
|
|
299
|
-
}
|
|
300
|
-
// --- Pattern 3: <Trans i18nKey="namespace:key"> ---
|
|
301
|
-
for (const m of content.matchAll(TRANS_I18N_KEY_RE)) {
|
|
302
|
-
if (!m[1])
|
|
303
|
-
continue;
|
|
304
|
-
const colon = m[1].indexOf(':');
|
|
305
|
-
const ns = m[1].slice(0, colon);
|
|
306
|
-
if (!reservedNs.has(ns)) {
|
|
307
|
-
addKey(result, ns, m[1].slice(colon + 1), routes);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
// --- Pattern 4: standalone "namespace:key" string literals ---
|
|
311
|
-
for (const m of content.matchAll(STANDALONE_NAMESPACED_KEYS_RE)) {
|
|
312
|
-
const raw = m[1];
|
|
313
|
-
if (!raw || namespacedKeys.has(raw))
|
|
314
|
-
continue;
|
|
315
|
-
const colon = raw.indexOf(':');
|
|
316
|
-
const ns = raw.slice(0, colon);
|
|
317
|
-
if (!reservedNs.has(ns)) {
|
|
318
|
-
addKey(result, ns, raw.slice(colon + 1), routes);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
// Warn on deprecated dot-notation standalone keys
|
|
322
|
-
for (const m of content.matchAll(STANDALONE_TRANSLATION_KEYS_RE)) {
|
|
323
|
-
const raw = m[1];
|
|
324
|
-
if (!raw || !raw.includes('.'))
|
|
325
|
-
continue;
|
|
326
|
-
if (namespacedKeys.has(raw) ||
|
|
327
|
-
namespacedKeys.has(raw.replace(/\./g, ':')))
|
|
328
|
-
continue;
|
|
329
|
-
console.warn(`[WARN] Standalone key in ${path.relative(process.cwd(), filePath)}: "${raw}" — use "namespace:key" format instead`);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
// ---------------------------------------------------------------------------
|
|
333
|
-
// Import resolution
|
|
334
|
-
// ---------------------------------------------------------------------------
|
|
335
|
-
const RELATIVE_IMPORT_RE = /from\s+['"](\.[./][^'"]+)['"]/g;
|
|
336
|
-
const ALIASED_IMPORT_RE = /from\s+['"]([a-zA-Z_@][^'"]*)['"]/g;
|
|
337
|
-
/**
|
|
338
|
-
* Resolve an aliased import path (e.g., @/components/button) to an absolute file path.
|
|
339
|
-
* Uses tsconfig path mappings if provided.
|
|
340
|
-
*/
|
|
341
|
-
function resolveAliasedImport(importPath, root, sourceExtensions, pathMappings) {
|
|
342
|
-
if (!pathMappings)
|
|
343
|
-
return null;
|
|
344
|
-
// Find matching alias pattern
|
|
345
|
-
for (const [alias, targets] of Object.entries(pathMappings)) {
|
|
346
|
-
// Convert alias pattern (e.g., "@/*") to regex
|
|
347
|
-
const pattern = alias.replace(/\*/g, '(.*)');
|
|
348
|
-
const regex = new RegExp(`^${pattern}$`);
|
|
349
|
-
const match = importPath.match(regex);
|
|
350
|
-
if (match) {
|
|
351
|
-
const captured = match[1] ?? '';
|
|
352
|
-
// Replace * in target with captured part
|
|
353
|
-
for (const target of targets) {
|
|
354
|
-
const resolved = target.replace(/\*/g, captured);
|
|
355
|
-
const fullPath = path.join(root, resolved);
|
|
356
|
-
// Try with and without extensions
|
|
357
|
-
if (sourceExtensions.has(path.extname(fullPath))) {
|
|
358
|
-
if (fs.existsSync(fullPath))
|
|
359
|
-
return fullPath;
|
|
360
|
-
}
|
|
361
|
-
else {
|
|
362
|
-
for (const ext of sourceExtensions) {
|
|
363
|
-
const candidate = fullPath + ext;
|
|
364
|
-
if (fs.existsSync(candidate))
|
|
365
|
-
return candidate;
|
|
366
|
-
}
|
|
367
|
-
// Try index file
|
|
368
|
-
for (const ext of sourceExtensions) {
|
|
369
|
-
const candidate = path.join(fullPath, 'index' + ext);
|
|
370
|
-
if (fs.existsSync(candidate))
|
|
371
|
-
return candidate;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
return null;
|
|
378
|
-
}
|
|
379
|
-
/**
|
|
380
|
-
* Resolve a relative import path to an absolute file path.
|
|
381
|
-
* Tries each candidate extension in order until a file is found.
|
|
382
|
-
*/
|
|
383
|
-
function resolveLocalImport(fromDir, importPath, sourceExtensions) {
|
|
384
|
-
const joined = path.join(fromDir, importPath);
|
|
385
|
-
// Already has an extension
|
|
386
|
-
if (sourceExtensions.has(path.extname(joined))) {
|
|
387
|
-
return fs.existsSync(joined) ? joined : null;
|
|
388
|
-
}
|
|
389
|
-
// Try adding each source extension
|
|
390
|
-
for (const ext of sourceExtensions) {
|
|
391
|
-
const candidate = joined + ext;
|
|
392
|
-
if (fs.existsSync(candidate))
|
|
393
|
-
return candidate;
|
|
394
|
-
}
|
|
395
|
-
// Try index file inside a directory
|
|
396
|
-
for (const ext of sourceExtensions) {
|
|
397
|
-
const candidate = path.join(joined, 'index' + ext);
|
|
398
|
-
if (fs.existsSync(candidate))
|
|
399
|
-
return candidate;
|
|
400
|
-
}
|
|
401
|
-
return null;
|
|
402
|
-
}
|
|
403
|
-
/**
|
|
404
|
-
* Extract all local imports (relative and aliased) from a source file.
|
|
405
|
-
*/
|
|
406
|
-
function extractLocalImports(filePath, sourceExtensions, root, pathMappings) {
|
|
407
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
408
|
-
const fromDir = path.dirname(filePath);
|
|
409
|
-
const results = [];
|
|
410
|
-
// Extract relative imports (e.g., ./components, ../lib)
|
|
411
|
-
for (const m of content.matchAll(RELATIVE_IMPORT_RE)) {
|
|
412
|
-
if (!m[1])
|
|
413
|
-
continue;
|
|
414
|
-
const resolved = resolveLocalImport(fromDir, m[1], sourceExtensions);
|
|
415
|
-
if (resolved)
|
|
416
|
-
results.push(resolved);
|
|
417
|
-
}
|
|
418
|
-
// Extract aliased imports (e.g., @/components) if pathMappings provided
|
|
419
|
-
if (root && pathMappings) {
|
|
420
|
-
for (const m of content.matchAll(ALIASED_IMPORT_RE)) {
|
|
421
|
-
if (!m[1])
|
|
422
|
-
continue;
|
|
423
|
-
// Skip already-matched relative imports
|
|
424
|
-
if (m[1].startsWith('.'))
|
|
425
|
-
continue;
|
|
426
|
-
const resolved = resolveAliasedImport(m[1], root, sourceExtensions, pathMappings);
|
|
427
|
-
if (resolved && !results.includes(resolved)) {
|
|
428
|
-
results.push(resolved);
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
return results;
|
|
433
|
-
}
|
|
434
|
-
/**
|
|
435
|
-
* For a given page file, find all wrapping layout files up to the app root.
|
|
436
|
-
* Returns layout paths in order from deepest to root (e.g. /nested/layout.tsx, /layout.tsx).
|
|
437
|
-
*/
|
|
438
|
-
function getLayoutChain(root, pageFile, sourceExtensions) {
|
|
439
|
-
const layouts = [];
|
|
440
|
-
let dir = path.dirname(pageFile);
|
|
441
|
-
while (dir.startsWith(root)) {
|
|
442
|
-
for (const ext of sourceExtensions) {
|
|
443
|
-
const candidate = path.join(dir, `layout${ext}`);
|
|
444
|
-
if (fs.existsSync(candidate)) {
|
|
445
|
-
layouts.push(candidate);
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
dir = path.dirname(dir);
|
|
449
|
-
}
|
|
450
|
-
return layouts;
|
|
451
|
-
}
|
|
452
|
-
// ---------------------------------------------------------------------------
|
|
453
|
-
// Project scan
|
|
454
|
-
// ---------------------------------------------------------------------------
|
|
455
|
-
/**
|
|
456
|
-
* Scans the project for translation keys and optionally merges external preview routes.
|
|
457
|
-
*
|
|
458
|
-
* Pass 1: Scan all files, extracting keys and associating them with page/layout routes.
|
|
459
|
-
* Pass 2: For each page/layout, walk its import tree to assign keys in deeply-nested
|
|
460
|
-
* components to the correct preview route.
|
|
461
|
-
* Pass 3: Merge external preview routes from database or config.
|
|
462
|
-
*/
|
|
463
|
-
export function scanProject(root, opts) {
|
|
464
|
-
const excludedDirs = new Set([
|
|
465
|
-
...DEFAULT_EXCLUDED_DIRS,
|
|
466
|
-
...(opts?.excludedDirs ?? []),
|
|
467
|
-
]);
|
|
468
|
-
const sourceExtensions = opts?.sourceExtensions
|
|
469
|
-
? new Set(opts.sourceExtensions)
|
|
470
|
-
: DEFAULT_SOURCE_EXTENSIONS;
|
|
471
|
-
const routeParams = opts?.routeParams;
|
|
472
|
-
const pathMappings = opts?.pathMappings;
|
|
473
|
-
const projectRoot = opts?.projectRoot ?? root;
|
|
474
|
-
const result = {};
|
|
475
|
-
let fileCount = 0;
|
|
476
|
-
// Pass 1: scan all files normally
|
|
477
|
-
const routeByFile = new Map();
|
|
478
|
-
for (const file of walkFiles(root, excludedDirs, sourceExtensions)) {
|
|
479
|
-
const routes = filePathToRoute(root, file);
|
|
480
|
-
routeByFile.set(file, routes);
|
|
481
|
-
extractKeysFromFile(file, routes, result, opts?.reservedCssNamespaces);
|
|
482
|
-
fileCount++;
|
|
483
|
-
}
|
|
484
|
-
// Pass 2: for each page/layout file, transitively walk its import tree and
|
|
485
|
-
// re-scan every non-page/layout component with the same routes. This ensures
|
|
486
|
-
// keys used in deeply-nested components (e.g. layout → Nav → NavItem) are
|
|
487
|
-
// associated with the correct preview routes.
|
|
488
|
-
const scannedWithRoute = new Set(); // "file::route" pairs already done
|
|
489
|
-
for (const [file, routes] of routeByFile) {
|
|
490
|
-
if (routes.length === 0)
|
|
491
|
-
continue;
|
|
492
|
-
// For page files, include the layout chain in the queue
|
|
493
|
-
// so that layout components also get keyed with the page's route
|
|
494
|
-
const isPage = path.basename(file).startsWith('page.');
|
|
495
|
-
const layoutChain = isPage
|
|
496
|
-
? getLayoutChain(root, file, sourceExtensions)
|
|
497
|
-
: [];
|
|
498
|
-
// Re-scan layout files themselves with this page's routes.
|
|
499
|
-
// They have no route of their own (filePathToRoute returns [] for layouts),
|
|
500
|
-
// so Pass 1 registered their keys without any route. Fix that here.
|
|
501
|
-
for (const layout of layoutChain) {
|
|
502
|
-
const layoutKey = `${layout}::${routes.join('|')}`;
|
|
503
|
-
if (!scannedWithRoute.has(layoutKey)) {
|
|
504
|
-
scannedWithRoute.add(layoutKey);
|
|
505
|
-
extractKeysFromFile(layout, routes, result, opts?.reservedCssNamespaces);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
const queue = [file, ...layoutChain];
|
|
509
|
-
while (queue.length > 0) {
|
|
510
|
-
const current = queue.shift();
|
|
511
|
-
const imports = extractLocalImports(current, sourceExtensions, projectRoot, pathMappings);
|
|
512
|
-
if (imports.length > 0) {
|
|
513
|
-
console.log(`[Pass 2] ${path.relative(root, current)} (${routes.join(', ')}) imports: ${imports.map(i => path.relative(root, i)).join(', ')}`);
|
|
514
|
-
}
|
|
515
|
-
for (const imported of imports) {
|
|
516
|
-
// Use routes.join('|') as key for deduplication
|
|
517
|
-
const key = `${imported}::${routes.join('|')}`;
|
|
518
|
-
if (scannedWithRoute.has(key))
|
|
519
|
-
continue;
|
|
520
|
-
scannedWithRoute.add(key);
|
|
521
|
-
// Skip files not in the walk result (outside root / excluded dirs)
|
|
522
|
-
if (!routeByFile.has(imported)) {
|
|
523
|
-
console.log(`[Pass 2] Skipping ${path.relative(root, imported)} — not in walk result`);
|
|
524
|
-
continue;
|
|
525
|
-
}
|
|
526
|
-
// Skip other page/layout files — they have their own routes
|
|
527
|
-
if (routeByFile.get(imported).length > 0)
|
|
528
|
-
continue;
|
|
529
|
-
console.log(`[Pass 2] Re-scanning ${path.relative(root, imported)} with routes: ${routes.join(', ')}`);
|
|
530
|
-
extractKeysFromFile(imported, routes, result, opts?.reservedCssNamespaces);
|
|
531
|
-
// Continue walking this component's own imports
|
|
532
|
-
queue.push(imported);
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
// Pass 3: upgrade plain dynamic routes to { route, params } objects using routeParams
|
|
537
|
-
if (routeParams) {
|
|
538
|
-
for (const [, keyMap] of Object.entries(result)) {
|
|
539
|
-
for (const [key, routes] of keyMap.entries()) {
|
|
540
|
-
const upgraded = routes.map(r => {
|
|
541
|
-
const rk = routeKey(r);
|
|
542
|
-
const params = routeParams[rk];
|
|
543
|
-
if (params && typeof r === 'string') {
|
|
544
|
-
return { route: rk, params };
|
|
545
|
-
}
|
|
546
|
-
return r;
|
|
547
|
-
});
|
|
548
|
-
keyMap.set(key, upgraded);
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
console.log(`Scanned ${fileCount} files.`);
|
|
553
|
-
return result;
|
|
554
|
-
}
|
|
555
|
-
//# sourceMappingURL=scanner.js.map
|
package/dist/scanner.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|