@translation-cms/sync 1.2.5 → 1.2.7
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 +18 -2
- package/dist/core/api-internals/pull.d.ts.map +1 -1
- package/dist/core/api-internals/pull.js +10 -0
- package/dist/core/api-internals/pull.js.map +1 -1
- package/dist/core/cache-internals/format.d.ts +4 -0
- package/dist/core/cache-internals/format.d.ts.map +1 -0
- package/dist/core/cache-internals/format.js +16 -0
- package/dist/core/cache-internals/format.js.map +1 -0
- package/dist/core/cache-internals/params.d.ts +21 -0
- package/dist/core/cache-internals/params.d.ts.map +1 -0
- package/dist/core/cache-internals/params.js +90 -0
- package/dist/core/cache-internals/params.js.map +1 -0
- package/dist/core/cache-internals/pull.d.ts +5 -0
- package/dist/core/cache-internals/pull.d.ts.map +1 -0
- package/dist/core/cache-internals/pull.js +21 -0
- package/dist/core/cache-internals/pull.js.map +1 -0
- package/dist/core/cache-internals/sync.d.ts +6 -0
- package/dist/core/cache-internals/sync.d.ts.map +1 -0
- package/dist/core/cache-internals/sync.js +71 -0
- package/dist/core/cache-internals/sync.js.map +1 -0
- package/dist/core/cache-internals/types.d.ts +28 -0
- package/dist/core/cache-internals/types.d.ts.map +1 -0
- package/dist/core/cache-internals/types.js +2 -0
- package/dist/core/cache-internals/types.js.map +1 -0
- package/dist/core/cache.d.ts +8 -57
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +13 -213
- package/dist/core/cache.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -108,15 +108,31 @@ Dit zal:
|
|
|
108
108
|
|
|
109
109
|
Controleer in de CMS of je keys verschenen zijn ✅
|
|
110
110
|
|
|
111
|
+
**Bij eerste sync:** je krijgt mogelijk een error dat geen vertalingen kunnen
|
|
112
|
+
worden gedownload — dit is normaal! De keys zijn net geupload maar hebben nog
|
|
113
|
+
geen vertalingen. Ga naar je CMS, vul vertalingen in, dan draai je `pull`
|
|
114
|
+
opnieuw.
|
|
115
|
+
|
|
116
|
+
## Stap 5b: Vertalingen Toevoegen in CMS
|
|
117
|
+
|
|
118
|
+
1. Open je Translations CMS project
|
|
119
|
+
2. Je keys staan nu gelistd (zonder vertalingen)
|
|
120
|
+
3. Vul vertalingen in per locale (English, Nederlands, etc.)
|
|
121
|
+
4. Klik Save
|
|
122
|
+
|
|
111
123
|
## Stap 6: Vertalingen Ophalen
|
|
112
124
|
|
|
113
|
-
|
|
125
|
+
Als je de eerste sync hebt gedaan EN vertalingen in de CMS hebt ingevuld:
|
|
114
126
|
|
|
115
127
|
```bash
|
|
116
128
|
pnpm sync-translations pull
|
|
117
129
|
```
|
|
118
130
|
|
|
119
|
-
Dit
|
|
131
|
+
Dit haalt vertalingen op van de CMS en schrijft ze naar lokale JSON:
|
|
132
|
+
|
|
133
|
+
- `dictionaries/en.json` → English vertalingen
|
|
134
|
+
- `dictionaries/nl.json` → Nederlandse vertalingen
|
|
135
|
+
- etc. (één per locale)
|
|
120
136
|
|
|
121
137
|
## Stap 7: Integratie in je Project
|
|
122
138
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/core/api-internals/pull.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA0H9C;;;GAGG;AACH,wBAAsB,gBAAgB,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/core/api-internals/pull.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA0H9C;;;GAGG;AACH,wBAAsB,gBAAgB,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAoMf"}
|
|
@@ -160,6 +160,8 @@ export async function pullTranslations(config, opts) {
|
|
|
160
160
|
console.error(`[CMS] ✗ Invalid JSON response: ${err instanceof Error ? err.message : String(err)}`);
|
|
161
161
|
process.exit(1);
|
|
162
162
|
}
|
|
163
|
+
// Log raw response for debugging
|
|
164
|
+
console.log(`[CMS] API returned ${Object.keys(data).length} locale keys`);
|
|
163
165
|
// Process and validate data
|
|
164
166
|
const processed = {};
|
|
165
167
|
for (const [locale, content] of Object.entries(data)) {
|
|
@@ -181,6 +183,14 @@ export async function pullTranslations(config, opts) {
|
|
|
181
183
|
}
|
|
182
184
|
if (Object.keys(processed).length === 0) {
|
|
183
185
|
console.error(`[CMS] ✗ No valid locales received from API`);
|
|
186
|
+
console.error(`[CMS] This can happen when:\n` +
|
|
187
|
+
` • Your sync just uploaded keys and no translations exist yet\n` +
|
|
188
|
+
` • Your CMS project has no locales configured\n` +
|
|
189
|
+
` • API credentials are incorrect\n\n` +
|
|
190
|
+
`Next steps:\n` +
|
|
191
|
+
` 1. Go to your CMS and add translations for the uploaded keys\n` +
|
|
192
|
+
` 2. Or verify your project ID/API key in .env.local\n` +
|
|
193
|
+
` 3. Then run: pnpm sync-translations pull`);
|
|
184
194
|
process.exit(1);
|
|
185
195
|
}
|
|
186
196
|
// Create output directory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/core/api-internals/pull.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/core/api-internals/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/core/cache-internals/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAQ9D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAGlE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function formatPreviewRoute(route) {
|
|
2
|
+
if (typeof route === 'string')
|
|
3
|
+
return route;
|
|
4
|
+
const params = route.params
|
|
5
|
+
? ` (${Object.entries(route.params)
|
|
6
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
7
|
+
.join(', ')})`
|
|
8
|
+
: '';
|
|
9
|
+
return `${route.route}${params}`;
|
|
10
|
+
}
|
|
11
|
+
export function formatPreviewRoutes(routes) {
|
|
12
|
+
if (routes.length === 0)
|
|
13
|
+
return 'no route';
|
|
14
|
+
return routes.map(formatPreviewRoute).join(', ');
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/core/cache-internals/format.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;QACvB,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,IAAI,CAAC,GAAG;QACpB,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAC3C,OAAO,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CachedRouteParams } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate route params from detected routes.
|
|
4
|
+
* Scans all routes, extracts [param] names, generates defaults.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* generateRouteParams(["/[locale]/blog/[slug]", "/about"])
|
|
8
|
+
* // {
|
|
9
|
+
* // "/[locale]/blog/[slug]": { "locale": "en", "slug": "demo" }
|
|
10
|
+
* // }
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateRouteParams(routes: string[]): Record<string, Record<string, string>>;
|
|
13
|
+
/**
|
|
14
|
+
* Load route params from cache (if exists).
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadRouteParamsCache(root: string): CachedRouteParams | null;
|
|
17
|
+
/**
|
|
18
|
+
* Save route params to cache.
|
|
19
|
+
*/
|
|
20
|
+
export declare function saveRouteParamsCache(root: string, params: Record<string, Record<string, string>>): void;
|
|
21
|
+
//# sourceMappingURL=params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/core/cache-internals/params.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA+CpD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,MAAM,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAexC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAU3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC/C,IAAI,CAUN"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Extract dynamic parameter names from a route string.
|
|
5
|
+
* E.g. "/[locale]/blog/[slug]" → ["locale", "slug"]
|
|
6
|
+
*/
|
|
7
|
+
function extractParamNames(route) {
|
|
8
|
+
const matches = route.match(/\[(\w+)\]/g) ?? [];
|
|
9
|
+
return matches.map(m => m.slice(1, -1));
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Generate a sensible default value for a param name.
|
|
13
|
+
*
|
|
14
|
+
* Rules:
|
|
15
|
+
* - locale/lang → "en"
|
|
16
|
+
* - id/ID-containing names → "123"
|
|
17
|
+
* - slug/username/code → "demo" or descriptive
|
|
18
|
+
* - others → "demo"
|
|
19
|
+
*/
|
|
20
|
+
function generateDefaultParamValue(paramName) {
|
|
21
|
+
const lower = paramName.toLowerCase();
|
|
22
|
+
if (lower === 'locale' || lower === 'lang' || lower === 'language') {
|
|
23
|
+
return 'en';
|
|
24
|
+
}
|
|
25
|
+
if (lower.includes('id') ||
|
|
26
|
+
lower === 'postid' ||
|
|
27
|
+
lower === 'productid' ||
|
|
28
|
+
lower === 'userid') {
|
|
29
|
+
return '123';
|
|
30
|
+
}
|
|
31
|
+
if (lower === 'slug') {
|
|
32
|
+
return 'demo';
|
|
33
|
+
}
|
|
34
|
+
if (lower === 'username') {
|
|
35
|
+
return 'demo-user';
|
|
36
|
+
}
|
|
37
|
+
if (lower === 'email') {
|
|
38
|
+
return 'demo@example.com';
|
|
39
|
+
}
|
|
40
|
+
return 'demo';
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Generate route params from detected routes.
|
|
44
|
+
* Scans all routes, extracts [param] names, generates defaults.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* generateRouteParams(["/[locale]/blog/[slug]", "/about"])
|
|
48
|
+
* // {
|
|
49
|
+
* // "/[locale]/blog/[slug]": { "locale": "en", "slug": "demo" }
|
|
50
|
+
* // }
|
|
51
|
+
*/
|
|
52
|
+
export function generateRouteParams(routes) {
|
|
53
|
+
const result = {};
|
|
54
|
+
for (const route of routes) {
|
|
55
|
+
const params = extractParamNames(route);
|
|
56
|
+
if (params.length === 0)
|
|
57
|
+
continue;
|
|
58
|
+
const defaults = {};
|
|
59
|
+
for (const param of params) {
|
|
60
|
+
defaults[param] = generateDefaultParamValue(param);
|
|
61
|
+
}
|
|
62
|
+
result[route] = defaults;
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Load route params from cache (if exists).
|
|
68
|
+
*/
|
|
69
|
+
export function loadRouteParamsCache(root) {
|
|
70
|
+
const metaPath = path.join(root, '.cms-sync-cache-meta.json');
|
|
71
|
+
if (!fs.existsSync(metaPath))
|
|
72
|
+
return null;
|
|
73
|
+
try {
|
|
74
|
+
return JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Save route params to cache.
|
|
82
|
+
*/
|
|
83
|
+
export function saveRouteParamsCache(root, params) {
|
|
84
|
+
const cached = {
|
|
85
|
+
generated: params,
|
|
86
|
+
timestamp: new Date().toISOString(),
|
|
87
|
+
};
|
|
88
|
+
fs.writeFileSync(path.join(root, '.cms-sync-cache-meta.json'), JSON.stringify(cached, null, 2), 'utf-8');
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/core/cache-internals/params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB;;;GAGG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,yBAAyB,CAAC,SAAiB;IAChD,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAEtC,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACjE,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IACI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,WAAW;QACrB,KAAK,KAAK,QAAQ,EACpB,CAAC;QACC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAC/B,MAAgB;IAEhB,MAAM,MAAM,GAA2C,EAAE,CAAC;IAE1D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAElC,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,QAAQ,CAAC,KAAK,CAAC,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CACb,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAChB,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAChC,IAAY,EACZ,MAA8C;IAE9C,MAAM,MAAM,GAAsB;QAC9B,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IACF,EAAE,CAAC,aAAa,CACZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,2BAA2B,CAAC,EAC5C,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAC/B,OAAO,CACV,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const PULL_META_FILE = ".last-pulled";
|
|
2
|
+
export declare const DEFAULT_PULL_TTL_MS: number;
|
|
3
|
+
export declare function getLastPulledTime(outputDir: string): number | null;
|
|
4
|
+
export declare function saveLastPulledTime(outputDir: string): void;
|
|
5
|
+
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/core/cache-internals/pull.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAC7C,eAAO,MAAM,mBAAmB,QAAgB,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASlE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAO1D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
export const PULL_META_FILE = '.last-pulled';
|
|
4
|
+
export const DEFAULT_PULL_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
5
|
+
export function getLastPulledTime(outputDir) {
|
|
6
|
+
const p = path.join(outputDir, PULL_META_FILE);
|
|
7
|
+
if (!fs.existsSync(p))
|
|
8
|
+
return null;
|
|
9
|
+
try {
|
|
10
|
+
const ts = new Date(fs.readFileSync(p, 'utf-8').trim()).getTime();
|
|
11
|
+
return isNaN(ts) ? null : ts;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function saveLastPulledTime(outputDir) {
|
|
18
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
19
|
+
fs.writeFileSync(path.join(outputDir, PULL_META_FILE), new Date().toISOString(), 'utf-8');
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/core/cache-internals/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAC7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAE9D,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAChD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CACZ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACpC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACxB,OAAO,CACV,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SerializedNamespaces, SyncDiff } from './types.js';
|
|
2
|
+
export declare function loadSyncCache(root: string): SerializedNamespaces | null;
|
|
3
|
+
export declare function saveSyncCache(root: string, data: SerializedNamespaces): void;
|
|
4
|
+
export declare function isSyncNeeded(current: SerializedNamespaces, cached: SerializedNamespaces | null): boolean;
|
|
5
|
+
export declare function computeDiff(current: SerializedNamespaces, cached: SerializedNamespaces | null): SyncDiff;
|
|
6
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/core/cache-internals/sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIjE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAQvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAM5E;AAED,wBAAgB,YAAY,CACxB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,oBAAoB,GAAG,IAAI,GACpC,OAAO,CAGT;AAED,wBAAgB,WAAW,CACvB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,oBAAoB,GAAG,IAAI,GACpC,QAAQ,CA6CV"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
const CACHE_FILE = '.cms-sync-cache.json';
|
|
4
|
+
export function loadSyncCache(root) {
|
|
5
|
+
const p = path.join(root, CACHE_FILE);
|
|
6
|
+
if (!fs.existsSync(p))
|
|
7
|
+
return null;
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function saveSyncCache(root, data) {
|
|
16
|
+
fs.writeFileSync(path.join(root, CACHE_FILE), JSON.stringify(data, null, 2), 'utf-8');
|
|
17
|
+
}
|
|
18
|
+
export function isSyncNeeded(current, cached) {
|
|
19
|
+
if (!cached)
|
|
20
|
+
return true;
|
|
21
|
+
return JSON.stringify(current) !== JSON.stringify(cached);
|
|
22
|
+
}
|
|
23
|
+
export function computeDiff(current, cached) {
|
|
24
|
+
const added = [];
|
|
25
|
+
const removed = [];
|
|
26
|
+
const routesChanged = [];
|
|
27
|
+
let unchanged = 0;
|
|
28
|
+
for (const [ns, keys] of Object.entries(current)) {
|
|
29
|
+
for (const { key, previewRoutes } of keys) {
|
|
30
|
+
const cachedEntry = cached?.[ns]?.find(k => k.key === key);
|
|
31
|
+
if (!cachedEntry) {
|
|
32
|
+
added.push({ namespace: ns, key, routes: previewRoutes });
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const before = [...cachedEntry.previewRoutes]
|
|
36
|
+
.map(routeToString)
|
|
37
|
+
.sort()
|
|
38
|
+
.join(',');
|
|
39
|
+
const after = [...previewRoutes]
|
|
40
|
+
.map(routeToString)
|
|
41
|
+
.sort()
|
|
42
|
+
.join(',');
|
|
43
|
+
if (before !== after) {
|
|
44
|
+
routesChanged.push({
|
|
45
|
+
namespace: ns,
|
|
46
|
+
key,
|
|
47
|
+
before: cachedEntry.previewRoutes,
|
|
48
|
+
after: previewRoutes,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
unchanged++;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (cached) {
|
|
58
|
+
for (const [ns, keys] of Object.entries(cached)) {
|
|
59
|
+
for (const { key } of keys) {
|
|
60
|
+
if (!(current[ns] ?? []).some(k => k.key === key)) {
|
|
61
|
+
removed.push({ namespace: ns, key });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { added, removed, routesChanged, unchanged };
|
|
67
|
+
}
|
|
68
|
+
function routeToString(r) {
|
|
69
|
+
return typeof r === 'string' ? r : JSON.stringify(r);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/core/cache-internals/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PreviewRoute } from '../scanner.js';
|
|
2
|
+
export type SerializedNamespaces = Record<string, Array<{
|
|
3
|
+
key: string;
|
|
4
|
+
previewRoutes: PreviewRoute[];
|
|
5
|
+
}>>;
|
|
6
|
+
export interface SyncDiff {
|
|
7
|
+
added: Array<{
|
|
8
|
+
namespace: string;
|
|
9
|
+
key: string;
|
|
10
|
+
routes: PreviewRoute[];
|
|
11
|
+
}>;
|
|
12
|
+
removed: Array<{
|
|
13
|
+
namespace: string;
|
|
14
|
+
key: string;
|
|
15
|
+
}>;
|
|
16
|
+
routesChanged: Array<{
|
|
17
|
+
namespace: string;
|
|
18
|
+
key: string;
|
|
19
|
+
before: PreviewRoute[];
|
|
20
|
+
after: PreviewRoute[];
|
|
21
|
+
}>;
|
|
22
|
+
unchanged: number;
|
|
23
|
+
}
|
|
24
|
+
export interface CachedRouteParams {
|
|
25
|
+
generated: Record<string, Record<string, string>>;
|
|
26
|
+
timestamp: string;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/cache-internals/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACrC,MAAM,EACN,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CACxD,CAAC;AAEF,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC,CAAC;IACzE,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,aAAa,EAAE,KAAK,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,YAAY,EAAE,CAAC;QACvB,KAAK,EAAE,YAAY,EAAE,CAAC;KACzB,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/cache-internals/types.ts"],"names":[],"mappings":""}
|
package/dist/core/cache.d.ts
CHANGED
|
@@ -1,62 +1,13 @@
|
|
|
1
|
-
import type { NamespaceMap
|
|
2
|
-
export type SerializedNamespaces
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
namespace: string;
|
|
9
|
-
key: string;
|
|
10
|
-
routes: PreviewRoute[];
|
|
11
|
-
}>;
|
|
12
|
-
removed: Array<{
|
|
13
|
-
namespace: string;
|
|
14
|
-
key: string;
|
|
15
|
-
}>;
|
|
16
|
-
routesChanged: Array<{
|
|
17
|
-
namespace: string;
|
|
18
|
-
key: string;
|
|
19
|
-
before: PreviewRoute[];
|
|
20
|
-
after: PreviewRoute[];
|
|
21
|
-
}>;
|
|
22
|
-
unchanged: number;
|
|
23
|
-
}
|
|
24
|
-
export interface CachedRouteParams {
|
|
25
|
-
generated: Record<string, Record<string, string>>;
|
|
26
|
-
timestamp: string;
|
|
27
|
-
}
|
|
28
|
-
export declare function loadSyncCache(root: string): SerializedNamespaces | null;
|
|
29
|
-
export declare function saveSyncCache(root: string, data: SerializedNamespaces): void;
|
|
30
|
-
export declare function isSyncNeeded(current: SerializedNamespaces, cached: SerializedNamespaces | null): boolean;
|
|
31
|
-
export declare function computeDiff(current: SerializedNamespaces, cached: SerializedNamespaces | null): SyncDiff;
|
|
32
|
-
export declare function writeReport(reportPath: string, namespaces: SerializedNamespaces, diff?: SyncDiff): void;
|
|
1
|
+
import type { NamespaceMap } from './scanner.js';
|
|
2
|
+
export type { SerializedNamespaces, SyncDiff, CachedRouteParams, } from './cache-internals/types.js';
|
|
3
|
+
export { loadSyncCache, saveSyncCache, isSyncNeeded, computeDiff, } from './cache-internals/sync.js';
|
|
4
|
+
export { generateRouteParams, loadRouteParamsCache, saveRouteParamsCache, } from './cache-internals/params.js';
|
|
5
|
+
export { PULL_META_FILE, DEFAULT_PULL_TTL_MS, getLastPulledTime, saveLastPulledTime, } from './cache-internals/pull.js';
|
|
6
|
+
export { formatPreviewRoute, formatPreviewRoutes, } from './cache-internals/format.js';
|
|
7
|
+
import type { SerializedNamespaces } from './cache-internals/types.js';
|
|
33
8
|
export declare function serializeNamespaces(namespaces: NamespaceMap): {
|
|
34
9
|
serialized: SerializedNamespaces;
|
|
35
10
|
totalKeys: number;
|
|
36
11
|
};
|
|
37
|
-
export declare
|
|
38
|
-
export declare const DEFAULT_PULL_TTL_MS: number;
|
|
39
|
-
export declare function getLastPulledTime(outputDir: string): number | null;
|
|
40
|
-
export declare function saveLastPulledTime(outputDir: string): void;
|
|
41
|
-
export declare function formatPreviewRoute(route: PreviewRoute): string;
|
|
42
|
-
export declare function formatPreviewRoutes(routes: PreviewRoute[]): string;
|
|
43
|
-
/**
|
|
44
|
-
* Generate route params from detected routes.
|
|
45
|
-
* Scans all routes, extracts [param] names, generates defaults.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* generateRouteParams(["/[locale]/blog/[slug]", "/about"])
|
|
49
|
-
* // {
|
|
50
|
-
* // "/[locale]/blog/[slug]": { "locale": "en", "slug": "demo" }
|
|
51
|
-
* // }
|
|
52
|
-
*/
|
|
53
|
-
export declare function generateRouteParams(routes: string[]): Record<string, Record<string, string>>;
|
|
54
|
-
/**
|
|
55
|
-
* Load route params from cache (if exists).
|
|
56
|
-
*/
|
|
57
|
-
export declare function loadRouteParamsCache(root: string): CachedRouteParams | null;
|
|
58
|
-
/**
|
|
59
|
-
* Save route params to cache.
|
|
60
|
-
*/
|
|
61
|
-
export declare function saveRouteParamsCache(root: string, params: Record<string, Record<string, string>>): void;
|
|
12
|
+
export declare function writeReport(reportPath: string, namespaces: SerializedNamespaces, diff?: any): void;
|
|
62
13
|
//# sourceMappingURL=cache.d.ts.map
|
package/dist/core/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,YAAY,EACR,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,GACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,kBAAkB,EAClB,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAMvE,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,YAAY,GAAG;IAC3D,UAAU,EAAE,oBAAoB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACrB,CAYA;AAMD,wBAAgB,WAAW,CACvB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,oBAAoB,EAChC,IAAI,CAAC,EAAE,GAAG,GACX,IAAI,CASN"}
|
package/dist/core/cache.js
CHANGED
|
@@ -1,89 +1,8 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const CACHE_FILE = '.cms-sync-cache.json';
|
|
7
|
-
export function loadSyncCache(root) {
|
|
8
|
-
const p = path.join(root, CACHE_FILE);
|
|
9
|
-
if (!fs.existsSync(p))
|
|
10
|
-
return null;
|
|
11
|
-
try {
|
|
12
|
-
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export function saveSyncCache(root, data) {
|
|
19
|
-
fs.writeFileSync(path.join(root, CACHE_FILE), JSON.stringify(data, null, 2), 'utf-8');
|
|
20
|
-
}
|
|
21
|
-
export function isSyncNeeded(current, cached) {
|
|
22
|
-
if (!cached)
|
|
23
|
-
return true;
|
|
24
|
-
return JSON.stringify(current) !== JSON.stringify(cached);
|
|
25
|
-
}
|
|
26
|
-
// ---------------------------------------------------------------------------
|
|
27
|
-
// Diff
|
|
28
|
-
// ---------------------------------------------------------------------------
|
|
29
|
-
export function computeDiff(current, cached) {
|
|
30
|
-
const added = [];
|
|
31
|
-
const removed = [];
|
|
32
|
-
const routesChanged = [];
|
|
33
|
-
let unchanged = 0;
|
|
34
|
-
for (const [ns, keys] of Object.entries(current)) {
|
|
35
|
-
for (const { key, previewRoutes } of keys) {
|
|
36
|
-
const cachedEntry = cached?.[ns]?.find(k => k.key === key);
|
|
37
|
-
if (!cachedEntry) {
|
|
38
|
-
added.push({ namespace: ns, key, routes: previewRoutes });
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
const before = [...cachedEntry.previewRoutes]
|
|
42
|
-
.map(routeToString)
|
|
43
|
-
.sort()
|
|
44
|
-
.join(',');
|
|
45
|
-
const after = [...previewRoutes]
|
|
46
|
-
.map(routeToString)
|
|
47
|
-
.sort()
|
|
48
|
-
.join(',');
|
|
49
|
-
if (before !== after) {
|
|
50
|
-
routesChanged.push({
|
|
51
|
-
namespace: ns,
|
|
52
|
-
key,
|
|
53
|
-
before: cachedEntry.previewRoutes,
|
|
54
|
-
after: previewRoutes,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
unchanged++;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (cached) {
|
|
64
|
-
for (const [ns, keys] of Object.entries(cached)) {
|
|
65
|
-
for (const { key } of keys) {
|
|
66
|
-
if (!(current[ns] ?? []).some(k => k.key === key)) {
|
|
67
|
-
removed.push({ namespace: ns, key });
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return { added, removed, routesChanged, unchanged };
|
|
73
|
-
}
|
|
74
|
-
// ---------------------------------------------------------------------------
|
|
75
|
-
// Report
|
|
76
|
-
// ---------------------------------------------------------------------------
|
|
77
|
-
export function writeReport(reportPath, namespaces, diff) {
|
|
78
|
-
const report = {
|
|
79
|
-
generatedAt: new Date().toISOString(),
|
|
80
|
-
namespaces,
|
|
81
|
-
};
|
|
82
|
-
if (diff)
|
|
83
|
-
report['diff'] = diff;
|
|
84
|
-
fs.writeFileSync(reportPath, JSON.stringify(report, null, 2), 'utf-8');
|
|
85
|
-
console.log(`[report] Written to ${reportPath}`);
|
|
86
|
-
}
|
|
2
|
+
export { loadSyncCache, saveSyncCache, isSyncNeeded, computeDiff, } from './cache-internals/sync.js';
|
|
3
|
+
export { generateRouteParams, loadRouteParamsCache, saveRouteParamsCache, } from './cache-internals/params.js';
|
|
4
|
+
export { PULL_META_FILE, DEFAULT_PULL_TTL_MS, getLastPulledTime, saveLastPulledTime, } from './cache-internals/pull.js';
|
|
5
|
+
export { formatPreviewRoute, formatPreviewRoutes, } from './cache-internals/format.js';
|
|
87
6
|
// ---------------------------------------------------------------------------
|
|
88
7
|
// Serialization
|
|
89
8
|
// ---------------------------------------------------------------------------
|
|
@@ -99,135 +18,16 @@ export function serializeNamespaces(namespaces) {
|
|
|
99
18
|
return { serialized, totalKeys };
|
|
100
19
|
}
|
|
101
20
|
// ---------------------------------------------------------------------------
|
|
102
|
-
//
|
|
103
|
-
// ---------------------------------------------------------------------------
|
|
104
|
-
export const PULL_META_FILE = '.last-pulled';
|
|
105
|
-
export const DEFAULT_PULL_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
106
|
-
export function getLastPulledTime(outputDir) {
|
|
107
|
-
const p = path.join(outputDir, PULL_META_FILE);
|
|
108
|
-
if (!fs.existsSync(p))
|
|
109
|
-
return null;
|
|
110
|
-
try {
|
|
111
|
-
const ts = new Date(fs.readFileSync(p, 'utf-8').trim()).getTime();
|
|
112
|
-
return isNaN(ts) ? null : ts;
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
export function saveLastPulledTime(outputDir) {
|
|
119
|
-
fs.mkdirSync(outputDir, { recursive: true });
|
|
120
|
-
fs.writeFileSync(path.join(outputDir, PULL_META_FILE), new Date().toISOString(), 'utf-8');
|
|
121
|
-
}
|
|
122
|
-
// ---------------------------------------------------------------------------
|
|
123
|
-
// Format helpers
|
|
124
|
-
// ---------------------------------------------------------------------------
|
|
125
|
-
function routeToString(r) {
|
|
126
|
-
return typeof r === 'string' ? r : JSON.stringify(r);
|
|
127
|
-
}
|
|
128
|
-
export function formatPreviewRoute(route) {
|
|
129
|
-
if (typeof route === 'string')
|
|
130
|
-
return route;
|
|
131
|
-
const params = route.params
|
|
132
|
-
? ` (${Object.entries(route.params)
|
|
133
|
-
.map(([k, v]) => `${k}=${v}`)
|
|
134
|
-
.join(', ')})`
|
|
135
|
-
: '';
|
|
136
|
-
return `${route.route}${params}`;
|
|
137
|
-
}
|
|
138
|
-
export function formatPreviewRoutes(routes) {
|
|
139
|
-
if (routes.length === 0)
|
|
140
|
-
return 'no route';
|
|
141
|
-
return routes.map(formatPreviewRoute).join(', ');
|
|
142
|
-
}
|
|
143
|
-
// ---------------------------------------------------------------------------
|
|
144
|
-
// Route params auto-generation
|
|
21
|
+
// Report
|
|
145
22
|
// ---------------------------------------------------------------------------
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
function extractParamNames(route) {
|
|
151
|
-
const matches = route.match(/\[(\w+)\]/g) ?? [];
|
|
152
|
-
return matches.map(m => m.slice(1, -1));
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Generate a sensible default value for a param name.
|
|
156
|
-
*
|
|
157
|
-
* Rules:
|
|
158
|
-
* - locale/lang → "en"
|
|
159
|
-
* - id/ID-containing names → "123"
|
|
160
|
-
* - slug/username/code → "demo" or descriptive
|
|
161
|
-
* - others → "demo"
|
|
162
|
-
*/
|
|
163
|
-
function generateDefaultParamValue(paramName) {
|
|
164
|
-
const lower = paramName.toLowerCase();
|
|
165
|
-
if (lower === 'locale' || lower === 'lang' || lower === 'language') {
|
|
166
|
-
return 'en';
|
|
167
|
-
}
|
|
168
|
-
if (lower.includes('id') ||
|
|
169
|
-
lower === 'postid' ||
|
|
170
|
-
lower === 'productid' ||
|
|
171
|
-
lower === 'userid') {
|
|
172
|
-
return '123';
|
|
173
|
-
}
|
|
174
|
-
if (lower === 'slug') {
|
|
175
|
-
return 'demo';
|
|
176
|
-
}
|
|
177
|
-
if (lower === 'username') {
|
|
178
|
-
return 'demo-user';
|
|
179
|
-
}
|
|
180
|
-
if (lower === 'email') {
|
|
181
|
-
return 'demo@example.com';
|
|
182
|
-
}
|
|
183
|
-
return 'demo';
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Generate route params from detected routes.
|
|
187
|
-
* Scans all routes, extracts [param] names, generates defaults.
|
|
188
|
-
*
|
|
189
|
-
* @example
|
|
190
|
-
* generateRouteParams(["/[locale]/blog/[slug]", "/about"])
|
|
191
|
-
* // {
|
|
192
|
-
* // "/[locale]/blog/[slug]": { "locale": "en", "slug": "demo" }
|
|
193
|
-
* // }
|
|
194
|
-
*/
|
|
195
|
-
export function generateRouteParams(routes) {
|
|
196
|
-
const result = {};
|
|
197
|
-
for (const route of routes) {
|
|
198
|
-
const params = extractParamNames(route);
|
|
199
|
-
if (params.length === 0)
|
|
200
|
-
continue;
|
|
201
|
-
const defaults = {};
|
|
202
|
-
for (const param of params) {
|
|
203
|
-
defaults[param] = generateDefaultParamValue(param);
|
|
204
|
-
}
|
|
205
|
-
result[route] = defaults;
|
|
206
|
-
}
|
|
207
|
-
return result;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Load route params from cache (if exists).
|
|
211
|
-
*/
|
|
212
|
-
export function loadRouteParamsCache(root) {
|
|
213
|
-
const metaPath = path.join(root, '.cms-sync-cache-meta.json');
|
|
214
|
-
if (!fs.existsSync(metaPath))
|
|
215
|
-
return null;
|
|
216
|
-
try {
|
|
217
|
-
return JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
return null;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Save route params to cache.
|
|
225
|
-
*/
|
|
226
|
-
export function saveRouteParamsCache(root, params) {
|
|
227
|
-
const cached = {
|
|
228
|
-
generated: params,
|
|
229
|
-
timestamp: new Date().toISOString(),
|
|
23
|
+
export function writeReport(reportPath, namespaces, diff) {
|
|
24
|
+
const report = {
|
|
25
|
+
generatedAt: new Date().toISOString(),
|
|
26
|
+
namespaces,
|
|
230
27
|
};
|
|
231
|
-
|
|
28
|
+
if (diff)
|
|
29
|
+
report['diff'] = diff;
|
|
30
|
+
fs.writeFileSync(reportPath, JSON.stringify(report, null, 2), 'utf-8');
|
|
31
|
+
console.log(`[report] Written to ${reportPath}`);
|
|
232
32
|
}
|
|
233
33
|
//# sourceMappingURL=cache.js.map
|
package/dist/core/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AASpB,OAAO,EACH,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,GACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,kBAAkB,EAClB,mBAAmB,GACtB,MAAM,6BAA6B,CAAC;AAKrC,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CAAC,UAAwB;IAIxD,MAAM,UAAU,GAAyB,EAAE,CAAC;IAC5C,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;aACvD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACrC,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,MAAM,UAAU,WAAW,CACvB,UAAkB,EAClB,UAAgC,EAChC,IAAU;IAEV,MAAM,MAAM,GAA4B;QACpC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,UAAU;KACb,CAAC;IACF,IAAI,IAAI;QAAE,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAEhC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;AACrD,CAAC"}
|