@translation-cms/sync 1.2.9 → 1.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +304 -151
- package/dist/api.d.ts +79 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +151 -0
- package/dist/api.js.map +1 -0
- package/dist/bin.js +51 -17
- package/dist/bin.js.map +1 -1
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +18 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pull.d.ts +7 -0
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +15 -2
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/status.d.ts +12 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +16 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +10 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +23 -4
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/watch.d.ts +14 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +23 -3
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/config-internals/args.d.ts +11 -0
- package/dist/config/config-internals/args.d.ts.map +1 -0
- package/dist/config/config-internals/args.js +22 -0
- package/dist/config/config-internals/args.js.map +1 -0
- package/dist/config/config-internals/env.d.ts +10 -0
- package/dist/config/config-internals/env.d.ts.map +1 -0
- package/dist/config/config-internals/env.js +35 -0
- package/dist/config/config-internals/env.js.map +1 -0
- package/dist/config/config-internals/file.d.ts +11 -0
- package/dist/config/config-internals/file.d.ts.map +1 -0
- package/dist/config/config-internals/file.js +28 -0
- package/dist/config/config-internals/file.js.map +1 -0
- package/dist/config/config-internals/resolve.d.ts +21 -0
- package/dist/config/config-internals/resolve.d.ts.map +1 -0
- package/dist/config/config-internals/resolve.js +73 -0
- package/dist/config/config-internals/resolve.js.map +1 -0
- package/dist/config/config-internals/root.d.ts +9 -0
- package/dist/config/config-internals/root.d.ts.map +1 -0
- package/dist/config/config-internals/root.js +22 -0
- package/dist/config/config-internals/root.js.map +1 -0
- package/dist/config/config-internals/types.d.ts +83 -0
- package/dist/config/config-internals/types.d.ts.map +1 -0
- package/dist/config/config-internals/types.js +9 -0
- package/dist/config/config-internals/types.js.map +1 -0
- package/dist/config/resolve-config.d.ts +9 -90
- package/dist/config/resolve-config.d.ts.map +1 -1
- package/dist/config/resolve-config.js +7 -123
- package/dist/config/resolve-config.js.map +1 -1
- package/dist/core/api-internals/pull.d.ts +9 -1
- package/dist/core/api-internals/pull.d.ts.map +1 -1
- package/dist/core/api-internals/pull.js +41 -28
- package/dist/core/api-internals/pull.js.map +1 -1
- package/dist/core/api-internals/sync.d.ts +9 -2
- package/dist/core/api-internals/sync.d.ts.map +1 -1
- package/dist/core/api-internals/sync.js +18 -2
- package/dist/core/api-internals/sync.js.map +1 -1
- package/dist/core/cache-internals/format.d.ts +16 -0
- package/dist/core/cache-internals/format.d.ts.map +1 -1
- package/dist/core/cache-internals/format.js +17 -0
- package/dist/core/cache-internals/format.js.map +1 -1
- package/dist/core/cache-internals/params.d.ts.map +1 -1
- package/dist/core/cache-internals/params.js +24 -24
- package/dist/core/cache-internals/params.js.map +1 -1
- package/dist/core/cache-internals/pull.d.ts +12 -0
- package/dist/core/cache-internals/pull.d.ts.map +1 -1
- package/dist/core/cache-internals/pull.js +13 -0
- package/dist/core/cache-internals/pull.js.map +1 -1
- package/dist/core/cache-internals/sync.d.ts +23 -0
- package/dist/core/cache-internals/sync.d.ts.map +1 -1
- package/dist/core/cache-internals/sync.js +33 -0
- package/dist/core/cache-internals/sync.js.map +1 -1
- package/dist/core/cache-internals/types.d.ts +20 -0
- package/dist/core/cache-internals/types.d.ts.map +1 -1
- package/dist/core/scanner-internals/ast.d.ts +23 -5
- package/dist/core/scanner-internals/ast.d.ts.map +1 -1
- package/dist/core/scanner-internals/ast.js +25 -5
- package/dist/core/scanner-internals/ast.js.map +1 -1
- package/dist/core/scanner-internals/file-walker.d.ts +3 -2
- package/dist/core/scanner-internals/file-walker.d.ts.map +1 -1
- package/dist/core/scanner-internals/file-walker.js +10 -12
- package/dist/core/scanner-internals/file-walker.js.map +1 -1
- package/dist/core/scanner-internals/import-resolver.d.ts +9 -1
- package/dist/core/scanner-internals/import-resolver.d.ts.map +1 -1
- package/dist/core/scanner-internals/import-resolver.js +58 -63
- package/dist/core/scanner-internals/import-resolver.js.map +1 -1
- package/dist/core/scanner-internals/key-extractor.d.ts +12 -8
- package/dist/core/scanner-internals/key-extractor.d.ts.map +1 -1
- package/dist/core/scanner-internals/key-extractor.js +125 -97
- package/dist/core/scanner-internals/key-extractor.js.map +1 -1
- package/dist/core/scanner-internals/route-detector.d.ts +16 -8
- package/dist/core/scanner-internals/route-detector.d.ts.map +1 -1
- package/dist/core/scanner-internals/route-detector.js +37 -33
- package/dist/core/scanner-internals/route-detector.js.map +1 -1
- package/dist/core/scanner.d.ts.map +1 -1
- package/dist/core/scanner.js +25 -8
- package/dist/core/scanner.js.map +1 -1
- package/dist/next.d.ts +28 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +65 -0
- package/dist/next.js.map +1 -0
- package/dist/preview/internals/highlight.d.ts +16 -7
- package/dist/preview/internals/highlight.d.ts.map +1 -1
- package/dist/preview/internals/highlight.js +71 -60
- package/dist/preview/internals/highlight.js.map +1 -1
- package/dist/scaffold/intenrals/scaffold.d.ts +17 -0
- package/dist/scaffold/intenrals/scaffold.d.ts.map +1 -1
- package/dist/scaffold/intenrals/scaffold.js +19 -0
- package/dist/scaffold/intenrals/scaffold.js.map +1 -1
- package/package.json +16 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../src/core/scanner-internals/ast.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAC;AACzD,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../src/core/scanner-internals/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* File system traversal utilities.
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* Recursively walk
|
|
6
|
-
*
|
|
5
|
+
* Recursively walk a directory, yielding paths of source files.
|
|
6
|
+
* Skips directories listed in `excludedDirs` and files whose extension
|
|
7
|
+
* is not in `sourceExtensions`.
|
|
7
8
|
*/
|
|
8
9
|
export declare function walkFiles(dir: string, excludedDirs: Set<string>, sourceExtensions: Set<string>): Generator<string>;
|
|
9
10
|
//# sourceMappingURL=file-walker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-walker.d.ts","sourceRoot":"","sources":["../../../src/core/scanner-internals/file-walker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH
|
|
1
|
+
{"version":3,"file":"file-walker.d.ts","sourceRoot":"","sources":["../../../src/core/scanner-internals/file-walker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;GAIG;AACH,wBAAiB,SAAS,CACtB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,SAAS,CAAC,MAAM,CAAC,CAanB"}
|
|
@@ -4,22 +4,20 @@
|
|
|
4
4
|
import fs from 'fs';
|
|
5
5
|
import path from 'path';
|
|
6
6
|
/**
|
|
7
|
-
* Recursively walk
|
|
8
|
-
*
|
|
7
|
+
* Recursively walk a directory, yielding paths of source files.
|
|
8
|
+
* Skips directories listed in `excludedDirs` and files whose extension
|
|
9
|
+
* is not in `sourceExtensions`.
|
|
9
10
|
*/
|
|
10
11
|
export function* walkFiles(dir, excludedDirs, sourceExtensions) {
|
|
11
|
-
const
|
|
12
|
-
|
|
12
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
13
|
+
const fullPath = path.join(dir, entry.name);
|
|
13
14
|
if (entry.isDirectory()) {
|
|
14
|
-
if (excludedDirs.has(entry.name))
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
else if (entry.isFile()) {
|
|
19
|
-
if (sourceExtensions.has(path.extname(entry.name))) {
|
|
20
|
-
yield path.join(dir, entry.name);
|
|
21
|
-
}
|
|
15
|
+
if (!excludedDirs.has(entry.name))
|
|
16
|
+
yield* walkFiles(fullPath, excludedDirs, sourceExtensions);
|
|
17
|
+
continue;
|
|
22
18
|
}
|
|
19
|
+
if (entry.isFile() && sourceExtensions.has(path.extname(entry.name)))
|
|
20
|
+
yield fullPath;
|
|
23
21
|
}
|
|
24
22
|
}
|
|
25
23
|
//# sourceMappingURL=file-walker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-walker.js","sourceRoot":"","sources":["../../../src/core/scanner-internals/file-walker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB
|
|
1
|
+
{"version":3,"file":"file-walker.js","sourceRoot":"","sources":["../../../src/core/scanner-internals/file-walker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;GAIG;AACH,MAAM,SAAS,CAAC,CAAC,SAAS,CACtB,GAAW,EACX,YAAyB,EACzB,gBAA6B;IAE7B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC7B,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;YAC/D,SAAS;QACb,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,QAAQ,CAAC;IACvB,CAAC;AACL,CAAC"}
|
|
@@ -4,10 +4,18 @@
|
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Extract all local imports (relative and aliased) from a source file via AST.
|
|
7
|
+
*
|
|
8
|
+
* Handles `import`, `export { ... } from`, and `export * from` declarations.
|
|
9
|
+
* Silently skips files that cannot be read or parsed (errorRecovery in parser
|
|
10
|
+
* handles most syntax issues, but catastrophic parse failures are caught here).
|
|
7
11
|
*/
|
|
8
12
|
export declare function extractLocalImports(filePath: string, sourceExtensions: Set<string>, root?: string, pathMappings?: Record<string, string[]>): string[];
|
|
9
13
|
/**
|
|
10
|
-
* For a given page file, find all wrapping layout files
|
|
14
|
+
* For a given page file, find all wrapping `layout.*` files walking upward
|
|
15
|
+
* through the directory tree until we reach the app root.
|
|
16
|
+
*
|
|
17
|
+
* The returned array is ordered from nearest to furthest layout, matching the
|
|
18
|
+
* order in which layouts wrap the page in Next.js App Router.
|
|
11
19
|
*/
|
|
12
20
|
export declare function getLayoutChain(root: string, pageFile: string, sourceExtensions: Set<string>): string[];
|
|
13
21
|
//# sourceMappingURL=import-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../../src/core/scanner-internals/import-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"import-resolver.d.ts","sourceRoot":"","sources":["../../../src/core/scanner-internals/import-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkFH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,IAAI,CAAC,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACxC,MAAM,EAAE,CAgCV;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC1B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,MAAM,EAAE,CAaV"}
|
|
@@ -6,76 +6,73 @@ import fs from 'fs';
|
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { parseSource, walk } from './ast.js';
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Given a base path (without extension), resolve it to an existing file by:
|
|
10
|
+
* 1. Returning it as-is if it already carries a known source extension.
|
|
11
|
+
* 2. Probing `basePath + ext` for each known extension.
|
|
12
|
+
* 3. Probing `basePath/index + ext` (barrel / directory index files).
|
|
13
|
+
*
|
|
14
|
+
* Returns null when no matching file is found on disk.
|
|
15
|
+
*/
|
|
16
|
+
function resolveFilePath(basePath, sourceExtensions) {
|
|
17
|
+
// Already has a known extension — check directly
|
|
18
|
+
if (sourceExtensions.has(path.extname(basePath)))
|
|
19
|
+
return fs.existsSync(basePath) ? basePath : null;
|
|
20
|
+
// Try appending each source extension (e.g. basePath.tsx)
|
|
21
|
+
for (const ext of sourceExtensions) {
|
|
22
|
+
const candidate = basePath + ext;
|
|
23
|
+
if (fs.existsSync(candidate))
|
|
24
|
+
return candidate;
|
|
25
|
+
}
|
|
26
|
+
// Try directory index files (e.g. basePath/index.tsx)
|
|
27
|
+
for (const ext of sourceExtensions) {
|
|
28
|
+
const candidate = path.join(basePath, 'index' + ext);
|
|
29
|
+
if (fs.existsSync(candidate))
|
|
30
|
+
return candidate;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve an aliased import path (e.g. `@/components/button`) to an absolute
|
|
36
|
+
* file path using the tsconfig path mappings provided.
|
|
37
|
+
*
|
|
38
|
+
* Each alias key may contain `*` as a wildcard (mirrors tsconfig `paths` syntax).
|
|
39
|
+
* Returns null when no mapping matches or no file is found on disk.
|
|
11
40
|
*/
|
|
12
41
|
function resolveAliasedImport(importPath, root, sourceExtensions, pathMappings) {
|
|
13
42
|
if (!pathMappings)
|
|
14
43
|
return null;
|
|
15
44
|
for (const [alias, targets] of Object.entries(pathMappings)) {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (fs.existsSync(fullPath))
|
|
26
|
-
return fullPath;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
for (const ext of sourceExtensions) {
|
|
30
|
-
const candidate = fullPath + ext;
|
|
31
|
-
if (fs.existsSync(candidate))
|
|
32
|
-
return candidate;
|
|
33
|
-
}
|
|
34
|
-
for (const ext of sourceExtensions) {
|
|
35
|
-
const candidate = path.join(fullPath, 'index' + ext);
|
|
36
|
-
if (fs.existsSync(candidate))
|
|
37
|
-
return candidate;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
45
|
+
const match = importPath.match(new RegExp(`^${alias.replace(/\*/g, '(.*)')}$`));
|
|
46
|
+
if (!match)
|
|
47
|
+
continue;
|
|
48
|
+
const captured = match[1] ?? '';
|
|
49
|
+
for (const target of targets) {
|
|
50
|
+
const fullPath = path.join(root, target.replace(/\*/g, captured));
|
|
51
|
+
const resolved = resolveFilePath(fullPath, sourceExtensions);
|
|
52
|
+
if (resolved)
|
|
53
|
+
return resolved;
|
|
41
54
|
}
|
|
42
55
|
}
|
|
43
56
|
return null;
|
|
44
57
|
}
|
|
45
58
|
/**
|
|
46
|
-
* Resolve a relative import path to an absolute
|
|
59
|
+
* Resolve a relative import path (e.g. `../utils/helpers`) to an absolute
|
|
60
|
+
* file path. Delegates to `resolveFilePath` for extension probing.
|
|
47
61
|
*/
|
|
48
62
|
function resolveLocalImport(fromDir, importPath, sourceExtensions) {
|
|
49
|
-
|
|
50
|
-
if (sourceExtensions.has(path.extname(joined))) {
|
|
51
|
-
return fs.existsSync(joined) ? joined : null;
|
|
52
|
-
}
|
|
53
|
-
for (const ext of sourceExtensions) {
|
|
54
|
-
const candidate = joined + ext;
|
|
55
|
-
if (fs.existsSync(candidate))
|
|
56
|
-
return candidate;
|
|
57
|
-
}
|
|
58
|
-
for (const ext of sourceExtensions) {
|
|
59
|
-
const candidate = path.join(joined, 'index' + ext);
|
|
60
|
-
if (fs.existsSync(candidate))
|
|
61
|
-
return candidate;
|
|
62
|
-
}
|
|
63
|
-
return null;
|
|
63
|
+
return resolveFilePath(path.join(fromDir, importPath), sourceExtensions);
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
66
|
* Extract all local imports (relative and aliased) from a source file via AST.
|
|
67
|
+
*
|
|
68
|
+
* Handles `import`, `export { ... } from`, and `export * from` declarations.
|
|
69
|
+
* Silently skips files that cannot be read or parsed (errorRecovery in parser
|
|
70
|
+
* handles most syntax issues, but catastrophic parse failures are caught here).
|
|
67
71
|
*/
|
|
68
72
|
export function extractLocalImports(filePath, sourceExtensions, root, pathMappings) {
|
|
69
|
-
let source;
|
|
70
|
-
try {
|
|
71
|
-
source = fs.readFileSync(filePath, 'utf-8');
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
return [];
|
|
75
|
-
}
|
|
76
73
|
let ast;
|
|
77
74
|
try {
|
|
78
|
-
ast = parseSource(filePath,
|
|
75
|
+
ast = parseSource(filePath, fs.readFileSync(filePath, 'utf-8'));
|
|
79
76
|
}
|
|
80
77
|
catch {
|
|
81
78
|
return [];
|
|
@@ -91,21 +88,20 @@ export function extractLocalImports(filePath, sourceExtensions, root, pathMappin
|
|
|
91
88
|
if (!src || typeof src.value !== 'string')
|
|
92
89
|
return;
|
|
93
90
|
const importPath = src.value;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
else if (root && pathMappings) {
|
|
99
|
-
resolved = resolveAliasedImport(importPath, root, sourceExtensions, pathMappings);
|
|
100
|
-
}
|
|
101
|
-
if (resolved && !results.includes(resolved)) {
|
|
91
|
+
const resolved = importPath.startsWith('.')
|
|
92
|
+
? resolveLocalImport(fromDir, importPath, sourceExtensions)
|
|
93
|
+
: resolveAliasedImport(importPath, root ?? '', sourceExtensions, pathMappings);
|
|
94
|
+
if (resolved && !results.includes(resolved))
|
|
102
95
|
results.push(resolved);
|
|
103
|
-
}
|
|
104
96
|
});
|
|
105
97
|
return results;
|
|
106
98
|
}
|
|
107
99
|
/**
|
|
108
|
-
* For a given page file, find all wrapping layout files
|
|
100
|
+
* For a given page file, find all wrapping `layout.*` files walking upward
|
|
101
|
+
* through the directory tree until we reach the app root.
|
|
102
|
+
*
|
|
103
|
+
* The returned array is ordered from nearest to furthest layout, matching the
|
|
104
|
+
* order in which layouts wrap the page in Next.js App Router.
|
|
109
105
|
*/
|
|
110
106
|
export function getLayoutChain(root, pageFile, sourceExtensions) {
|
|
111
107
|
const layouts = [];
|
|
@@ -113,9 +109,8 @@ export function getLayoutChain(root, pageFile, sourceExtensions) {
|
|
|
113
109
|
while (dir.startsWith(root)) {
|
|
114
110
|
for (const ext of sourceExtensions) {
|
|
115
111
|
const candidate = path.join(dir, `layout${ext}`);
|
|
116
|
-
if (fs.existsSync(candidate))
|
|
112
|
+
if (fs.existsSync(candidate))
|
|
117
113
|
layouts.push(candidate);
|
|
118
|
-
}
|
|
119
114
|
}
|
|
120
115
|
dir = path.dirname(dir);
|
|
121
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-resolver.js","sourceRoot":"","sources":["../../../src/core/scanner-internals/import-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAG7C
|
|
1
|
+
{"version":3,"file":"import-resolver.js","sourceRoot":"","sources":["../../../src/core/scanner-internals/import-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Extraction of translation keys from source files.
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
|
+
* Five passes over the AST per file:
|
|
5
|
+
* 1. Collect `t`-binding declarations (useTranslation / getTranslation / getTranslations)
|
|
6
|
+
* 2. Extract keys from `t('namespace:key')` call expressions
|
|
7
|
+
* 3. Extract keys from `<Trans i18nKey="namespace:key">` JSX elements
|
|
8
|
+
* 4. Extract keys from `I18nKey`-typed string literals in config/data files
|
|
9
|
+
* 5. Extract keys from object properties whose name ends with `Key`
|
|
4
10
|
*/
|
|
5
11
|
import type { NamespaceMap } from './types.js';
|
|
6
12
|
/**
|
|
7
|
-
* Extract translation keys from
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* - t('namespace:key') calls
|
|
13
|
-
* - <Trans i18nKey="namespace:key"> components
|
|
13
|
+
* Extract all translation keys from `filePath` and merge them into `result`.
|
|
14
|
+
*
|
|
15
|
+
* @param filePath Absolute path to the source file to scan.
|
|
16
|
+
* @param routes Preview routes associated with this file ([] for overlays).
|
|
17
|
+
* @param result Accumulator map updated in place.
|
|
14
18
|
*/
|
|
15
19
|
export declare function extractKeysFromFile(filePath: string, routes: string[], result: NamespaceMap): void;
|
|
16
20
|
//# sourceMappingURL=key-extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-extractor.d.ts","sourceRoot":"","sources":["../../../src/core/scanner-internals/key-extractor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"key-extractor.d.ts","sourceRoot":"","sources":["../../../src/core/scanner-internals/key-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,YAAY,CAAC;AA0FxD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,YAAY,GACrB,IAAI,CAuJN"}
|