@translation-cms/sync 1.2.25 → 1.2.28
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 +62 -16
- package/package.json +3 -2
- package/dist/api.d.ts +0 -105
- package/dist/api.d.ts.map +0 -1
- package/dist/api.js +0 -208
- package/dist/api.js.map +0 -1
- package/dist/bin.d.ts +0 -25
- package/dist/bin.d.ts.map +0 -1
- package/dist/bin.js +0 -208
- package/dist/bin.js.map +0 -1
- package/dist/commands/init.d.ts +0 -10
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -89
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/pull.d.ts +0 -10
- package/dist/commands/pull.d.ts.map +0 -1
- package/dist/commands/pull.js +0 -35
- package/dist/commands/pull.js.map +0 -1
- package/dist/commands/status.d.ts +0 -15
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -62
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/sync.d.ts +0 -24
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -131
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/watch.d.ts +0 -18
- package/dist/commands/watch.d.ts.map +0 -1
- package/dist/commands/watch.js +0 -71
- package/dist/commands/watch.js.map +0 -1
- package/dist/config/config-internals/args.d.ts +0 -11
- package/dist/config/config-internals/args.d.ts.map +0 -1
- package/dist/config/config-internals/args.js +0 -22
- package/dist/config/config-internals/args.js.map +0 -1
- package/dist/config/config-internals/env.d.ts +0 -10
- package/dist/config/config-internals/env.d.ts.map +0 -1
- package/dist/config/config-internals/env.js +0 -35
- package/dist/config/config-internals/env.js.map +0 -1
- package/dist/config/config-internals/file.d.ts +0 -11
- package/dist/config/config-internals/file.d.ts.map +0 -1
- package/dist/config/config-internals/file.js +0 -28
- package/dist/config/config-internals/file.js.map +0 -1
- package/dist/config/config-internals/resolve.d.ts +0 -21
- package/dist/config/config-internals/resolve.d.ts.map +0 -1
- package/dist/config/config-internals/resolve.js +0 -73
- package/dist/config/config-internals/resolve.js.map +0 -1
- package/dist/config/config-internals/root.d.ts +0 -9
- package/dist/config/config-internals/root.d.ts.map +0 -1
- package/dist/config/config-internals/root.js +0 -22
- package/dist/config/config-internals/root.js.map +0 -1
- package/dist/config/config-internals/types.d.ts +0 -91
- package/dist/config/config-internals/types.d.ts.map +0 -1
- package/dist/config/config-internals/types.js +0 -9
- package/dist/config/config-internals/types.js.map +0 -1
- package/dist/config/resolve-config.d.ts +0 -11
- package/dist/config/resolve-config.d.ts.map +0 -1
- package/dist/config/resolve-config.js +0 -10
- package/dist/config/resolve-config.js.map +0 -1
- package/dist/core/api-internals/helpers.d.ts +0 -9
- package/dist/core/api-internals/helpers.d.ts.map +0 -1
- package/dist/core/api-internals/helpers.js +0 -14
- package/dist/core/api-internals/helpers.js.map +0 -1
- package/dist/core/api-internals/pull.d.ts +0 -19
- package/dist/core/api-internals/pull.d.ts.map +0 -1
- package/dist/core/api-internals/pull.js +0 -269
- package/dist/core/api-internals/pull.js.map +0 -1
- package/dist/core/api-internals/route-config.d.ts +0 -13
- package/dist/core/api-internals/route-config.d.ts.map +0 -1
- package/dist/core/api-internals/route-config.js +0 -34
- package/dist/core/api-internals/route-config.js.map +0 -1
- package/dist/core/api-internals/sync.d.ts +0 -19
- package/dist/core/api-internals/sync.d.ts.map +0 -1
- package/dist/core/api-internals/sync.js +0 -139
- package/dist/core/api-internals/sync.js.map +0 -1
- package/dist/core/api-internals/types.d.ts +0 -33
- package/dist/core/api-internals/types.d.ts.map +0 -1
- package/dist/core/api-internals/types.js +0 -5
- package/dist/core/api-internals/types.js.map +0 -1
- package/dist/core/api.d.ts +0 -11
- package/dist/core/api.d.ts.map +0 -1
- package/dist/core/api.js +0 -11
- package/dist/core/api.js.map +0 -1
- package/dist/core/cache-internals/format.d.ts +0 -20
- package/dist/core/cache-internals/format.d.ts.map +0 -1
- package/dist/core/cache-internals/format.js +0 -33
- package/dist/core/cache-internals/format.js.map +0 -1
- package/dist/core/cache-internals/params.d.ts +0 -33
- package/dist/core/cache-internals/params.d.ts.map +0 -1
- package/dist/core/cache-internals/params.js +0 -155
- package/dist/core/cache-internals/params.js.map +0 -1
- package/dist/core/cache-internals/pull.d.ts +0 -17
- package/dist/core/cache-internals/pull.d.ts.map +0 -1
- package/dist/core/cache-internals/pull.js +0 -34
- package/dist/core/cache-internals/pull.js.map +0 -1
- package/dist/core/cache-internals/sync.d.ts +0 -29
- package/dist/core/cache-internals/sync.d.ts.map +0 -1
- package/dist/core/cache-internals/sync.js +0 -104
- package/dist/core/cache-internals/sync.js.map +0 -1
- package/dist/core/cache-internals/types.d.ts +0 -48
- package/dist/core/cache-internals/types.d.ts.map +0 -1
- package/dist/core/cache-internals/types.js +0 -2
- package/dist/core/cache-internals/types.js.map +0 -1
- package/dist/core/cache.d.ts +0 -13
- package/dist/core/cache.d.ts.map +0 -1
- package/dist/core/cache.js +0 -33
- package/dist/core/cache.js.map +0 -1
- package/dist/core/scanner-internals/ast.d.ts +0 -40
- package/dist/core/scanner-internals/ast.d.ts.map +0 -1
- package/dist/core/scanner-internals/ast.js +0 -100
- package/dist/core/scanner-internals/ast.js.map +0 -1
- package/dist/core/scanner-internals/file-walker.d.ts +0 -10
- package/dist/core/scanner-internals/file-walker.d.ts.map +0 -1
- package/dist/core/scanner-internals/file-walker.js +0 -23
- package/dist/core/scanner-internals/file-walker.js.map +0 -1
- package/dist/core/scanner-internals/import-resolver.d.ts +0 -21
- package/dist/core/scanner-internals/import-resolver.d.ts.map +0 -1
- package/dist/core/scanner-internals/import-resolver.js +0 -119
- package/dist/core/scanner-internals/import-resolver.js.map +0 -1
- package/dist/core/scanner-internals/key-extractor.d.ts +0 -20
- package/dist/core/scanner-internals/key-extractor.d.ts.map +0 -1
- package/dist/core/scanner-internals/key-extractor.js +0 -274
- package/dist/core/scanner-internals/key-extractor.js.map +0 -1
- package/dist/core/scanner-internals/nav-config-scanner.d.ts +0 -30
- package/dist/core/scanner-internals/nav-config-scanner.d.ts.map +0 -1
- package/dist/core/scanner-internals/nav-config-scanner.js +0 -170
- package/dist/core/scanner-internals/nav-config-scanner.js.map +0 -1
- package/dist/core/scanner-internals/route-detector.d.ts +0 -27
- package/dist/core/scanner-internals/route-detector.d.ts.map +0 -1
- package/dist/core/scanner-internals/route-detector.js +0 -78
- package/dist/core/scanner-internals/route-detector.js.map +0 -1
- package/dist/core/scanner-internals/types.d.ts +0 -60
- package/dist/core/scanner-internals/types.d.ts.map +0 -1
- package/dist/core/scanner-internals/types.js +0 -29
- package/dist/core/scanner-internals/types.js.map +0 -1
- package/dist/core/scanner.d.ts +0 -21
- package/dist/core/scanner.d.ts.map +0 -1
- package/dist/core/scanner.js +0 -162
- package/dist/core/scanner.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/next.d.ts +0 -33
- package/dist/next.d.ts.map +0 -1
- package/dist/next.js +0 -110
- package/dist/next.js.map +0 -1
- package/dist/preview/index.d.ts +0 -39
- package/dist/preview/index.d.ts.map +0 -1
- package/dist/preview/index.js +0 -123
- package/dist/preview/index.js.map +0 -1
- package/dist/preview/internals/highlight.d.ts +0 -31
- package/dist/preview/internals/highlight.d.ts.map +0 -1
- package/dist/preview/internals/highlight.js +0 -184
- package/dist/preview/internals/highlight.js.map +0 -1
- package/dist/preview/internals/interactions.d.ts +0 -15
- package/dist/preview/internals/interactions.d.ts.map +0 -1
- package/dist/preview/internals/interactions.js +0 -38
- package/dist/preview/internals/interactions.js.map +0 -1
- package/dist/preview/internals/interactive.d.ts +0 -14
- package/dist/preview/internals/interactive.d.ts.map +0 -1
- package/dist/preview/internals/interactive.js +0 -122
- package/dist/preview/internals/interactive.js.map +0 -1
- package/dist/preview/internals/locales.d.ts +0 -9
- package/dist/preview/internals/locales.d.ts.map +0 -1
- package/dist/preview/internals/locales.js +0 -24
- package/dist/preview/internals/locales.js.map +0 -1
- package/dist/preview/internals/state.d.ts +0 -37
- package/dist/preview/internals/state.d.ts.map +0 -1
- package/dist/preview/internals/state.js +0 -74
- package/dist/preview/internals/state.js.map +0 -1
- package/dist/preview/internals/styles.d.ts +0 -8
- package/dist/preview/internals/styles.d.ts.map +0 -1
- package/dist/preview/internals/styles.js +0 -28
- package/dist/preview/internals/styles.js.map +0 -1
- package/dist/preview/internals/types.d.ts +0 -74
- package/dist/preview/internals/types.d.ts.map +0 -1
- package/dist/preview/internals/types.js +0 -5
- package/dist/preview/internals/types.js.map +0 -1
- package/dist/preview/internals/ui-indicators.d.ts +0 -15
- package/dist/preview/internals/ui-indicators.d.ts.map +0 -1
- package/dist/preview/internals/ui-indicators.js +0 -92
- package/dist/preview/internals/ui-indicators.js.map +0 -1
- package/dist/scaffold/index.d.ts +0 -3
- package/dist/scaffold/index.d.ts.map +0 -1
- package/dist/scaffold/index.js +0 -3
- package/dist/scaffold/index.js.map +0 -1
- package/dist/scaffold/intenrals/scaffold.d.ts +0 -24
- package/dist/scaffold/intenrals/scaffold.d.ts.map +0 -1
- package/dist/scaffold/intenrals/scaffold.js +0 -53
- package/dist/scaffold/intenrals/scaffold.js.map +0 -1
- package/dist/scaffold/intenrals/templates.d.ts +0 -10
- package/dist/scaffold/intenrals/templates.d.ts.map +0 -1
- package/dist/scaffold/intenrals/templates.js +0 -344
- package/dist/scaffold/intenrals/templates.js.map +0 -1
- package/dist/scaffold/intenrals/types.d.ts +0 -14
- package/dist/scaffold/intenrals/types.d.ts.map +0 -1
- package/dist/scaffold/intenrals/types.js +0 -5
- package/dist/scaffold/intenrals/types.js.map +0 -1
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format a single PreviewRoute for human-readable output.
|
|
3
|
-
*
|
|
4
|
-
* Plain string routes are returned as-is.
|
|
5
|
-
* Object routes (with params) are rendered as `/path (key=value, …)`.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* formatPreviewRoute('/dashboard') // → "/dashboard"
|
|
9
|
-
* formatPreviewRoute({ route: '/blog/[slug]', params: { slug: 'hello' } })
|
|
10
|
-
* // → "/blog/[slug] (slug=hello)"
|
|
11
|
-
*/
|
|
12
|
-
export function formatPreviewRoute(route) {
|
|
13
|
-
if (typeof route === 'string')
|
|
14
|
-
return route;
|
|
15
|
-
// Append param list only when params are present
|
|
16
|
-
const params = route.params
|
|
17
|
-
? ` (${Object.entries(route.params)
|
|
18
|
-
.map(([k, v]) => `${k}=${v}`)
|
|
19
|
-
.join(', ')})`
|
|
20
|
-
: '';
|
|
21
|
-
return `${route.route}${params}`;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Format an array of PreviewRoutes as a comma-separated string.
|
|
25
|
-
* Returns `"no route"` for keys that have no associated preview routes
|
|
26
|
-
* (e.g. keys inside dialogs or overlays).
|
|
27
|
-
*/
|
|
28
|
-
export function formatPreviewRoutes(routes) {
|
|
29
|
-
if (routes.length === 0)
|
|
30
|
-
return 'no route';
|
|
31
|
-
return routes.map(formatPreviewRoute).join(', ');
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=format.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/core/cache-internals/format.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,iDAAiD;IACjD,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;;;;GAIG;AACH,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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
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
|
-
/**
|
|
22
|
-
* Write a TypeScript mock-data file exporting all route params as a typed
|
|
23
|
-
* `cmsRouteParams` constant. Import this in context files, generateStaticParams,
|
|
24
|
-
* tests, or Storybook stories to get type-safe mock data.
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* // src/lib/cms-mock-params.ts (auto-generated)
|
|
28
|
-
* export const cmsRouteParams = {
|
|
29
|
-
* "/[locale]/blog/[slug]": { locale: "en", slug: "demo" },
|
|
30
|
-
* } as const;
|
|
31
|
-
*/
|
|
32
|
-
export declare function writeMockDataFile(root: string, params: Record<string, Record<string, string>>, relativeOutputPath: string): void;
|
|
33
|
-
//# sourceMappingURL=params.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/core/cache-internals/params.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAoEpD;;;;;;;;;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;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC9C,kBAAkB,EAAE,MAAM,GAC3B,IAAI,CAqCN"}
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { createHash } from 'crypto';
|
|
4
|
-
/**
|
|
5
|
-
* Extract dynamic parameter names from a route string.
|
|
6
|
-
* E.g. "/[locale]/blog/[slug]" → ["locale", "slug"]
|
|
7
|
-
*/
|
|
8
|
-
function extractParamNames(route) {
|
|
9
|
-
const matches = route.match(/\[(\w+)\]/g) ?? [];
|
|
10
|
-
return matches.map(m => m.slice(1, -1));
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Generate a deterministic UUID for a param ID.
|
|
14
|
-
* Same param name always produces the same UUID (for consistency).
|
|
15
|
-
* Uses MD5 hash of the param name to create a v4-like UUID.
|
|
16
|
-
*/
|
|
17
|
-
function generateDeterministicUUID(paramName) {
|
|
18
|
-
const hash = createHash('md5')
|
|
19
|
-
.update(`cms-param:${paramName}`)
|
|
20
|
-
.digest('hex');
|
|
21
|
-
// Format as UUID v4-like: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
22
|
-
return `${hash.slice(0, 8)}-${hash.slice(8, 12)}-${hash.slice(12, 16)}-${hash.slice(16, 20)}-${hash.slice(20, 32)}`;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Generate a sensible default value for any dynamic route param name.
|
|
26
|
-
*
|
|
27
|
-
* Matches by suffix/pattern so it works generically — e.g. `productId`,
|
|
28
|
-
* `orderId`, `articleSlug`, `teamName` — without hardcoding every variant.
|
|
29
|
-
*
|
|
30
|
-
* For IDs: generates a deterministic UUID so the same param always produces
|
|
31
|
-
* the same value (important for caching and consistency).
|
|
32
|
-
*
|
|
33
|
-
* Fallback: converts the param name from camelCase to kebab-case, which is
|
|
34
|
-
* both human-readable and a valid value for slug-style params.
|
|
35
|
-
* e.g. `articleSlug` → `"article-slug"`, `teamName` → `"team-name"`
|
|
36
|
-
*/
|
|
37
|
-
function generateDefaultParamValue(paramName) {
|
|
38
|
-
const lower = paramName.toLowerCase();
|
|
39
|
-
// Any param ending in "id" (userId, productId, orderId, …) → deterministic UUID
|
|
40
|
-
if (lower.endsWith('id'))
|
|
41
|
-
return generateDeterministicUUID(paramName);
|
|
42
|
-
// Email addresses
|
|
43
|
-
if (lower.includes('email'))
|
|
44
|
-
return 'demo@example.com';
|
|
45
|
-
// Dates (createdDate, startDate, …)
|
|
46
|
-
if (lower.includes('date'))
|
|
47
|
-
return '2024-01-01';
|
|
48
|
-
// Pagination and numeric indices (page, pageNum, stepIndex, …)
|
|
49
|
-
if (lower === 'page' ||
|
|
50
|
-
lower.endsWith('num') ||
|
|
51
|
-
lower.endsWith('index') ||
|
|
52
|
-
lower.endsWith('page'))
|
|
53
|
-
return '1';
|
|
54
|
-
// Version strings (version, apiVersion, ver, …)
|
|
55
|
-
if (lower.includes('version') || lower === 'ver')
|
|
56
|
-
return 'v1';
|
|
57
|
-
// Fallback: kebab-case the param name so the value is always meaningful
|
|
58
|
-
return paramName
|
|
59
|
-
.replace(/([A-Z])/g, '-$1')
|
|
60
|
-
.toLowerCase()
|
|
61
|
-
.replace(/^-/, '');
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Generate route params from detected routes.
|
|
65
|
-
* Scans all routes, extracts [param] names, generates defaults.
|
|
66
|
-
*
|
|
67
|
-
* @example
|
|
68
|
-
* generateRouteParams(["/[locale]/blog/[slug]", "/about"])
|
|
69
|
-
* // {
|
|
70
|
-
* // "/[locale]/blog/[slug]": { "locale": "en", "slug": "demo" }
|
|
71
|
-
* // }
|
|
72
|
-
*/
|
|
73
|
-
export function generateRouteParams(routes) {
|
|
74
|
-
const result = {};
|
|
75
|
-
for (const route of routes) {
|
|
76
|
-
const params = extractParamNames(route);
|
|
77
|
-
if (params.length === 0)
|
|
78
|
-
continue;
|
|
79
|
-
const defaults = {};
|
|
80
|
-
for (const param of params) {
|
|
81
|
-
defaults[param] = generateDefaultParamValue(param);
|
|
82
|
-
}
|
|
83
|
-
result[route] = defaults;
|
|
84
|
-
}
|
|
85
|
-
return result;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Load route params from cache (if exists).
|
|
89
|
-
*/
|
|
90
|
-
export function loadRouteParamsCache(root) {
|
|
91
|
-
const metaPath = path.join(root, '.cms-sync-cache-meta.json');
|
|
92
|
-
if (!fs.existsSync(metaPath))
|
|
93
|
-
return null;
|
|
94
|
-
try {
|
|
95
|
-
return JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Save route params to cache.
|
|
103
|
-
*/
|
|
104
|
-
export function saveRouteParamsCache(root, params) {
|
|
105
|
-
const cached = {
|
|
106
|
-
generated: params,
|
|
107
|
-
timestamp: new Date().toISOString(),
|
|
108
|
-
};
|
|
109
|
-
fs.writeFileSync(path.join(root, '.cms-sync-cache-meta.json'), JSON.stringify(cached, null, 2), 'utf-8');
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Write a TypeScript mock-data file exporting all route params as a typed
|
|
113
|
-
* `cmsRouteParams` constant. Import this in context files, generateStaticParams,
|
|
114
|
-
* tests, or Storybook stories to get type-safe mock data.
|
|
115
|
-
*
|
|
116
|
-
* @example
|
|
117
|
-
* // src/lib/cms-mock-params.ts (auto-generated)
|
|
118
|
-
* export const cmsRouteParams = {
|
|
119
|
-
* "/[locale]/blog/[slug]": { locale: "en", slug: "demo" },
|
|
120
|
-
* } as const;
|
|
121
|
-
*/
|
|
122
|
-
export function writeMockDataFile(root, params, relativeOutputPath) {
|
|
123
|
-
if (Object.keys(params).length === 0)
|
|
124
|
-
return;
|
|
125
|
-
const entries = Object.entries(params)
|
|
126
|
-
.map(([route, p]) => {
|
|
127
|
-
const inner = Object.entries(p)
|
|
128
|
-
.map(([k, v]) => ` ${JSON.stringify(k)}: ${JSON.stringify(v)}`)
|
|
129
|
-
.join(',\n');
|
|
130
|
-
return ` ${JSON.stringify(route)}: {\n${inner},\n }`;
|
|
131
|
-
})
|
|
132
|
-
.join(',\n');
|
|
133
|
-
const content = [
|
|
134
|
-
'// auto-generated by sync-translations — do not edit manually',
|
|
135
|
-
'// run `sync-translations sync` to update',
|
|
136
|
-
'',
|
|
137
|
-
'export const cmsRouteParams = {',
|
|
138
|
-
entries + ',',
|
|
139
|
-
'} as const;',
|
|
140
|
-
'',
|
|
141
|
-
'export type CmsRoute = keyof typeof cmsRouteParams;',
|
|
142
|
-
'export type CmsRouteParams<R extends CmsRoute> = (typeof cmsRouteParams)[R];',
|
|
143
|
-
'',
|
|
144
|
-
].join('\n');
|
|
145
|
-
const absPath = path.isAbsolute(relativeOutputPath)
|
|
146
|
-
? relativeOutputPath
|
|
147
|
-
: path.join(root, relativeOutputPath);
|
|
148
|
-
const dir = path.dirname(absPath);
|
|
149
|
-
if (!fs.existsSync(dir))
|
|
150
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
151
|
-
fs.writeFileSync(absPath, content, 'utf-8');
|
|
152
|
-
// eslint-disable-next-line no-console
|
|
153
|
-
console.log(`[mock-data] Written to ${path.relative(root, absPath)}`);
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=params.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/core/cache-internals/params.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/** Filename of the pull timestamp marker written inside the output directory. */
|
|
2
|
-
export declare const PULL_META_FILE = ".last-pulled";
|
|
3
|
-
/** Default TTL before a pull is considered stale and a re-fetch is triggered. */
|
|
4
|
-
export declare const DEFAULT_PULL_TTL_MS: number;
|
|
5
|
-
/**
|
|
6
|
-
* Read the timestamp of the last successful pull from the marker file.
|
|
7
|
-
* Returns the time as a Unix timestamp (ms), or null when the file is absent
|
|
8
|
-
* or contains an unparseable date.
|
|
9
|
-
*/
|
|
10
|
-
export declare function getLastPulledTime(outputDir: string): number | null;
|
|
11
|
-
/**
|
|
12
|
-
* Write the current time as an ISO 8601 string to the marker file.
|
|
13
|
-
* Creates the output directory if it doesn't exist yet.
|
|
14
|
-
* Called after a successful pull to reset the TTL clock.
|
|
15
|
-
*/
|
|
16
|
-
export declare function saveLastPulledTime(outputDir: string): void;
|
|
17
|
-
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/core/cache-internals/pull.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,QAAgB,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUlE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAO1D"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
/** Filename of the pull timestamp marker written inside the output directory. */
|
|
4
|
-
export const PULL_META_FILE = '.last-pulled';
|
|
5
|
-
/** Default TTL before a pull is considered stale and a re-fetch is triggered. */
|
|
6
|
-
export const DEFAULT_PULL_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
7
|
-
/**
|
|
8
|
-
* Read the timestamp of the last successful pull from the marker file.
|
|
9
|
-
* Returns the time as a Unix timestamp (ms), or null when the file is absent
|
|
10
|
-
* or contains an unparseable date.
|
|
11
|
-
*/
|
|
12
|
-
export function getLastPulledTime(outputDir) {
|
|
13
|
-
const p = path.join(outputDir, PULL_META_FILE);
|
|
14
|
-
if (!fs.existsSync(p))
|
|
15
|
-
return null;
|
|
16
|
-
try {
|
|
17
|
-
const ts = new Date(fs.readFileSync(p, 'utf-8').trim()).getTime();
|
|
18
|
-
// isNaN guard handles a corrupted or empty file
|
|
19
|
-
return isNaN(ts) ? null : ts;
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Write the current time as an ISO 8601 string to the marker file.
|
|
27
|
-
* Creates the output directory if it doesn't exist yet.
|
|
28
|
-
* Called after a successful pull to reset the TTL clock.
|
|
29
|
-
*/
|
|
30
|
-
export function saveLastPulledTime(outputDir) {
|
|
31
|
-
fs.mkdirSync(outputDir, { recursive: true });
|
|
32
|
-
fs.writeFileSync(path.join(outputDir, PULL_META_FILE), new Date().toISOString(), 'utf-8');
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=pull.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,iFAAiF;AACjF,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAE7C,iFAAiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAE9D;;;;GAIG;AACH,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,gDAAgD;QAChD,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;;;;GAIG;AACH,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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { SerializedNamespaces, SyncDiff } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Load the serialized namespace map from the last successful sync.
|
|
4
|
-
* Returns null when no cache exists yet or when the file is unreadable.
|
|
5
|
-
*/
|
|
6
|
-
export declare function loadSyncCache(root: string): SerializedNamespaces | null;
|
|
7
|
-
/**
|
|
8
|
-
* Persist the serialized namespace map as the new sync baseline.
|
|
9
|
-
* Subsequent runs diff against this to detect changes.
|
|
10
|
-
*/
|
|
11
|
-
export declare function saveSyncCache(root: string, data: SerializedNamespaces): void;
|
|
12
|
-
/**
|
|
13
|
-
* Returns true when the current scan differs from the cached baseline,
|
|
14
|
-
* meaning the CMS needs to be updated.
|
|
15
|
-
* Always returns true when there is no cache yet (first run).
|
|
16
|
-
*/
|
|
17
|
-
export declare function isSyncNeeded(current: SerializedNamespaces, cached: SerializedNamespaces | null): boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Compute a three-way diff between the current scan and the cached baseline:
|
|
20
|
-
*
|
|
21
|
-
* - `added` keys present in current but not in cache
|
|
22
|
-
* - `removed` keys present in cache but no longer in current
|
|
23
|
-
* - `routesChanged` keys present in both but with different preview routes
|
|
24
|
-
* - `unchanged` count of keys that are identical in both
|
|
25
|
-
*
|
|
26
|
-
* Preview routes are compared order-independently by sorting before joining.
|
|
27
|
-
*/
|
|
28
|
-
export declare function computeDiff(current: SerializedNamespaces, cached: SerializedNamespaces | null): SyncDiff;
|
|
29
|
-
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;AAKjE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAQvE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAM5E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CACxB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,oBAAoB,GAAG,IAAI,GACpC,OAAO,CAIT;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,oBAAoB,GAAG,IAAI,GACpC,QAAQ,CAgDV"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
/** Filename of the sync baseline cache written at the project root. */
|
|
4
|
-
const CACHE_FILE = '.cms-sync-cache.json';
|
|
5
|
-
/**
|
|
6
|
-
* Load the serialized namespace map from the last successful sync.
|
|
7
|
-
* Returns null when no cache exists yet or when the file is unreadable.
|
|
8
|
-
*/
|
|
9
|
-
export function loadSyncCache(root) {
|
|
10
|
-
const p = path.join(root, CACHE_FILE);
|
|
11
|
-
if (!fs.existsSync(p))
|
|
12
|
-
return null;
|
|
13
|
-
try {
|
|
14
|
-
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Persist the serialized namespace map as the new sync baseline.
|
|
22
|
-
* Subsequent runs diff against this to detect changes.
|
|
23
|
-
*/
|
|
24
|
-
export function saveSyncCache(root, data) {
|
|
25
|
-
fs.writeFileSync(path.join(root, CACHE_FILE), JSON.stringify(data, null, 2), 'utf-8');
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Returns true when the current scan differs from the cached baseline,
|
|
29
|
-
* meaning the CMS needs to be updated.
|
|
30
|
-
* Always returns true when there is no cache yet (first run).
|
|
31
|
-
*/
|
|
32
|
-
export function isSyncNeeded(current, cached) {
|
|
33
|
-
if (!cached)
|
|
34
|
-
return true;
|
|
35
|
-
// Stringify comparison is sufficient — order is stable because serializeNamespaces sorts keys
|
|
36
|
-
return JSON.stringify(current) !== JSON.stringify(cached);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Compute a three-way diff between the current scan and the cached baseline:
|
|
40
|
-
*
|
|
41
|
-
* - `added` keys present in current but not in cache
|
|
42
|
-
* - `removed` keys present in cache but no longer in current
|
|
43
|
-
* - `routesChanged` keys present in both but with different preview routes
|
|
44
|
-
* - `unchanged` count of keys that are identical in both
|
|
45
|
-
*
|
|
46
|
-
* Preview routes are compared order-independently by sorting before joining.
|
|
47
|
-
*/
|
|
48
|
-
export function computeDiff(current, cached) {
|
|
49
|
-
const added = [];
|
|
50
|
-
const removed = [];
|
|
51
|
-
const routesChanged = [];
|
|
52
|
-
let unchanged = 0;
|
|
53
|
-
// Forward pass: find added keys and route changes
|
|
54
|
-
for (const [ns, keys] of Object.entries(current)) {
|
|
55
|
-
for (const { key, previewRoutes } of keys) {
|
|
56
|
-
const cachedEntry = cached?.[ns]?.find(k => k.key === key);
|
|
57
|
-
if (!cachedEntry) {
|
|
58
|
-
added.push({ namespace: ns, key, routes: previewRoutes });
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
// Sort both sides so route order doesn't cause false positives
|
|
62
|
-
const before = [...cachedEntry.previewRoutes]
|
|
63
|
-
.map(routeToString)
|
|
64
|
-
.sort()
|
|
65
|
-
.join(',');
|
|
66
|
-
const after = [...previewRoutes]
|
|
67
|
-
.map(routeToString)
|
|
68
|
-
.sort()
|
|
69
|
-
.join(',');
|
|
70
|
-
if (before !== after) {
|
|
71
|
-
routesChanged.push({
|
|
72
|
-
namespace: ns,
|
|
73
|
-
key,
|
|
74
|
-
before: cachedEntry.previewRoutes,
|
|
75
|
-
after: previewRoutes,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
unchanged++;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Reverse pass: find keys that exist in cache but are gone from current
|
|
85
|
-
if (cached) {
|
|
86
|
-
for (const [ns, keys] of Object.entries(cached)) {
|
|
87
|
-
for (const { key } of keys) {
|
|
88
|
-
if (!(current[ns] ?? []).some(k => k.key === key)) {
|
|
89
|
-
removed.push({ namespace: ns, key });
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return { added, removed, routesChanged, unchanged };
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Normalise a PreviewRoute to a string for stable comparison.
|
|
98
|
-
* String routes are returned as-is; object routes are JSON-stringified.
|
|
99
|
-
*/
|
|
100
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
101
|
-
function routeToString(r) {
|
|
102
|
-
return typeof r === 'string' ? r : JSON.stringify(r);
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/core/cache-internals/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,uEAAuE;AACvE,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAyB,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAA0B;IAClE,EAAE,CAAC,aAAa,CACZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAC7B,OAAO,CACV,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CACxB,OAA6B,EAC7B,MAAmC;IAEnC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,8FAA8F;IAC9F,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CACvB,OAA6B,EAC7B,MAAmC;IAEnC,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,aAAa,GAA8B,EAAE,CAAC;IACpD,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,kDAAkD;IAClD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,KAAK,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC;YACxC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACJ,+DAA+D;gBAC/D,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;qBACxC,GAAG,CAAC,aAAa,CAAC;qBAClB,IAAI,EAAE;qBACN,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,MAAM,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC;qBAC3B,GAAG,CAAC,aAAa,CAAC;qBAClB,IAAI,EAAE;qBACN,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBACnB,aAAa,CAAC,IAAI,CAAC;wBACf,SAAS,EAAE,EAAE;wBACb,GAAG;wBACH,MAAM,EAAE,WAAW,CAAC,aAAa;wBACjC,KAAK,EAAE,aAAa;qBACvB,CAAC,CAAC;gBACP,CAAC;qBAAM,CAAC;oBACJ,SAAS,EAAE,CAAC;gBAChB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,IAAI,MAAM,EAAE,CAAC;QACT,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;oBAChD,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACzC,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,8DAA8D;AAC9D,SAAS,aAAa,CAAC,CAAM;IACzB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { PreviewRoute } from '../scanner.js';
|
|
2
|
-
/**
|
|
3
|
-
* The serialized form of a NamespaceMap written to the sync cache and sent to
|
|
4
|
-
* the CMS API. Each namespace maps to an ordered array of key entries so the
|
|
5
|
-
* structure is JSON-serializable without Maps.
|
|
6
|
-
*/
|
|
7
|
-
export type SerializedNamespaces = Record<string, Array<{
|
|
8
|
-
key: string;
|
|
9
|
-
previewRoutes: PreviewRoute[];
|
|
10
|
-
}>>;
|
|
11
|
-
/**
|
|
12
|
-
* Result of diffing the current scan against the cached baseline.
|
|
13
|
-
*
|
|
14
|
-
* - `added` keys new since the last sync
|
|
15
|
-
* - `removed` keys that no longer exist in the source
|
|
16
|
-
* - `routesChanged` keys whose set of preview routes has changed
|
|
17
|
-
* - `unchanged` count of keys identical in both snapshots
|
|
18
|
-
*/
|
|
19
|
-
export interface SyncDiff {
|
|
20
|
-
added: Array<{
|
|
21
|
-
namespace: string;
|
|
22
|
-
key: string;
|
|
23
|
-
routes: PreviewRoute[];
|
|
24
|
-
}>;
|
|
25
|
-
removed: Array<{
|
|
26
|
-
namespace: string;
|
|
27
|
-
key: string;
|
|
28
|
-
}>;
|
|
29
|
-
routesChanged: Array<{
|
|
30
|
-
namespace: string;
|
|
31
|
-
key: string;
|
|
32
|
-
before: PreviewRoute[];
|
|
33
|
-
after: PreviewRoute[];
|
|
34
|
-
}>;
|
|
35
|
-
unchanged: number;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Shape of the `.cms-sync-cache-meta.json` file that stores auto-generated
|
|
39
|
-
* route params between sync runs.
|
|
40
|
-
*
|
|
41
|
-
* - `generated` route → param map produced by the last sync
|
|
42
|
-
* - `timestamp` ISO 8601 string of when the cache was last written
|
|
43
|
-
*/
|
|
44
|
-
export interface CachedRouteParams {
|
|
45
|
-
generated: Record<string, Record<string, string>>;
|
|
46
|
-
timestamp: string;
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;;;;GAIG;AACH,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;;;;;;;GAOG;AACH,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;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/cache-internals/types.ts"],"names":[],"mappings":""}
|
package/dist/core/cache.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
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, writeMockDataFile, } 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';
|
|
8
|
-
export declare function serializeNamespaces(namespaces: NamespaceMap): {
|
|
9
|
-
serialized: SerializedNamespaces;
|
|
10
|
-
totalKeys: number;
|
|
11
|
-
};
|
|
12
|
-
export declare function writeReport(reportPath: string, namespaces: SerializedNamespaces, diff?: any): void;
|
|
13
|
-
//# sourceMappingURL=cache.d.ts.map
|
package/dist/core/cache.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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,EACpB,iBAAiB,GACpB,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
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
export { loadSyncCache, saveSyncCache, isSyncNeeded, computeDiff, } from './cache-internals/sync.js';
|
|
3
|
-
export { generateRouteParams, loadRouteParamsCache, saveRouteParamsCache, writeMockDataFile, } 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';
|
|
6
|
-
// ---------------------------------------------------------------------------
|
|
7
|
-
// Serialization
|
|
8
|
-
// ---------------------------------------------------------------------------
|
|
9
|
-
export function serializeNamespaces(namespaces) {
|
|
10
|
-
const serialized = {};
|
|
11
|
-
let totalKeys = 0;
|
|
12
|
-
for (const [ns, keyMap] of Object.entries(namespaces)) {
|
|
13
|
-
serialized[ns] = [...keyMap.entries()]
|
|
14
|
-
.map(([key, previewRoutes]) => ({ key, previewRoutes }))
|
|
15
|
-
.sort((a, b) => a.key.localeCompare(b.key));
|
|
16
|
-
totalKeys += keyMap.size;
|
|
17
|
-
}
|
|
18
|
-
return { serialized, totalKeys };
|
|
19
|
-
}
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
// Report
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
export function writeReport(reportPath, namespaces, diff) {
|
|
24
|
-
const report = {
|
|
25
|
-
generatedAt: new Date().toISOString(),
|
|
26
|
-
namespaces,
|
|
27
|
-
};
|
|
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}`);
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=cache.js.map
|
package/dist/core/cache.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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,EACpB,iBAAiB,GACpB,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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AST parsing and traversal utilities.
|
|
3
|
-
*/
|
|
4
|
-
import type { AstNode } from './types.js';
|
|
5
|
-
/**
|
|
6
|
-
* Walk an AST node depth-first, calling visit() for every node encountered.
|
|
7
|
-
*
|
|
8
|
-
* Handles three cases:
|
|
9
|
-
* - Arrays → recurse into each element
|
|
10
|
-
* - AST nodes → call visit(), then recurse into all object-valued properties
|
|
11
|
-
* - Primitives → stop (nothing to traverse)
|
|
12
|
-
*/
|
|
13
|
-
export declare function walk(node: unknown, visit: (node: AstNode) => void): void;
|
|
14
|
-
/**
|
|
15
|
-
* Parse source code into a Babel AST with the appropriate plugins for the
|
|
16
|
-
* file extension.
|
|
17
|
-
*
|
|
18
|
-
* - `.ts` → typescript
|
|
19
|
-
* - `.tsx`, `.jsx`, `.js` → typescript (if .tsx) + jsx
|
|
20
|
-
*
|
|
21
|
-
* `errorRecovery: true` lets the parser continue past syntax errors so a
|
|
22
|
-
* single broken file doesn't abort the entire scan.
|
|
23
|
-
*/
|
|
24
|
-
export declare function parseSource(filePath: string, source: string): unknown;
|
|
25
|
-
/**
|
|
26
|
-
* Extract the static string value from a `StringLiteral` or a `TemplateLiteral`
|
|
27
|
-
* that contains no expressions (i.e. `` `plain string` ``).
|
|
28
|
-
* Returns null for dynamic expressions or any other node type.
|
|
29
|
-
*/
|
|
30
|
-
export declare function stringValue(node: unknown): string | null;
|
|
31
|
-
/**
|
|
32
|
-
* Extract namespace string(s) from the first argument of a
|
|
33
|
-
* `useTranslation()` / `getTranslation()` call.
|
|
34
|
-
*
|
|
35
|
-
* Handles:
|
|
36
|
-
* - Single string: `useTranslation('sidebar')` → `['sidebar']`
|
|
37
|
-
* - Array of strings: `useTranslation(['common', 'nav'])` → `['common', 'nav']`
|
|
38
|
-
*/
|
|
39
|
-
export declare function namespacesFromArg(node: unknown): string[];
|
|
40
|
-
//# sourceMappingURL=ast.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../../src/core/scanner-internals/ast.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAYxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUrE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAiBxD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAWzD"}
|