@translation-cms/sync 1.1.78 → 1.1.82
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 +101 -72
- package/dist/cli-entry.js +1 -1
- package/dist/cli-entry.js.map +1 -1
- package/dist/index.d.ts +0 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -42
- package/dist/index.js.map +1 -1
- package/dist/load-config.d.ts +8 -14
- package/dist/load-config.d.ts.map +1 -1
- package/dist/load-config.js.map +1 -1
- package/dist/scanner.d.ts +5 -5
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +14 -40
- package/dist/scanner.js.map +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +10 -8
- package/dist/sync.js.map +1 -1
- package/package.json +1 -5
- package/dist/client.d.ts +0 -165
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -364
- package/dist/client.js.map +0 -1
- package/dist/i18next.d.ts +0 -48
- package/dist/i18next.d.ts.map +0 -1
- package/dist/i18next.js +0 -74
- package/dist/i18next.js.map +0 -1
package/dist/sync.js
CHANGED
|
@@ -301,23 +301,25 @@ export async function pullTranslations(config, opts) {
|
|
|
301
301
|
writtenFiles.add(filePath);
|
|
302
302
|
fileCount++;
|
|
303
303
|
}
|
|
304
|
-
//
|
|
305
|
-
let
|
|
306
|
-
for (const entry of fs.readdirSync(opts.outputDir, {
|
|
304
|
+
// Empty locale files that no longer exist in CMS (don't delete — static imports would break)
|
|
305
|
+
let emptied = 0;
|
|
306
|
+
for (const entry of fs.readdirSync(opts.outputDir, {
|
|
307
|
+
withFileTypes: true,
|
|
308
|
+
})) {
|
|
307
309
|
if (entry.name === PULL_META_FILE)
|
|
308
310
|
continue;
|
|
309
311
|
if (!entry.isFile() || !entry.name.endsWith('.json'))
|
|
310
312
|
continue;
|
|
311
313
|
const filePath = path.join(opts.outputDir, entry.name);
|
|
312
314
|
if (!writtenFiles.has(filePath)) {
|
|
313
|
-
fs.
|
|
314
|
-
console.log(`[CMS]
|
|
315
|
-
|
|
315
|
+
fs.writeFileSync(filePath, '{}\n', 'utf-8');
|
|
316
|
+
console.log(`[CMS] ○ Emptied: ${entry.name} (no data in CMS)`);
|
|
317
|
+
emptied++;
|
|
316
318
|
}
|
|
317
319
|
}
|
|
318
320
|
saveLastPulledTime(opts.outputDir);
|
|
319
|
-
if (
|
|
320
|
-
console.log(`[CMS] ✓ Refresh complete: wrote ${fileCount} files,
|
|
321
|
+
if (emptied > 0) {
|
|
322
|
+
console.log(`[CMS] ✓ Refresh complete: wrote ${fileCount} files, emptied ${emptied} stale files`);
|
|
321
323
|
}
|
|
322
324
|
else {
|
|
323
325
|
console.log(`[CMS] ✓ Refresh complete: wrote ${fileCount} JSON files, updated ${PULL_META_FILE}`);
|
package/dist/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@translation-cms/sync",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.82",
|
|
4
4
|
"description": "Scan translation keys in your codebase and sync them to the Translations CMS",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -12,10 +12,6 @@
|
|
|
12
12
|
"import": "./dist/index.js",
|
|
13
13
|
"types": "./dist/index.d.ts"
|
|
14
14
|
},
|
|
15
|
-
"./i18next": {
|
|
16
|
-
"import": "./dist/i18next.js",
|
|
17
|
-
"types": "./dist/i18next.d.ts"
|
|
18
|
-
},
|
|
19
15
|
"./cli": {
|
|
20
16
|
"import": "./dist/cli.js",
|
|
21
17
|
"types": "./dist/cli.d.ts"
|
package/dist/client.d.ts
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
export interface CMSConfig {
|
|
2
|
-
cmsUrl: string;
|
|
3
|
-
projectId: string;
|
|
4
|
-
anonKey?: string;
|
|
5
|
-
defaultLocale?: string;
|
|
6
|
-
fallbackLocale?: string;
|
|
7
|
-
/**
|
|
8
|
-
* URL base path for local translation JSON files (served from public/).
|
|
9
|
-
* Only used when NEXT_PUBLIC_USE_LOCAL_TRANSLATIONS=true.
|
|
10
|
-
* Defaults to '/dictionaries'.
|
|
11
|
-
*/
|
|
12
|
-
localePath?: string;
|
|
13
|
-
/**
|
|
14
|
-
* Filesystem path where local translation JSON files are written.
|
|
15
|
-
* Required for autoRefresh to work. Example: './public/locales'
|
|
16
|
-
*/
|
|
17
|
-
localDir?: string;
|
|
18
|
-
/**
|
|
19
|
-
* Automatically refresh local JSON files when they are older than autoRefreshTtlMs.
|
|
20
|
-
* Only works server-side (Node.js). Requires localDir to be set.
|
|
21
|
-
*/
|
|
22
|
-
autoRefresh?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* TTL in milliseconds for auto-refresh. Defaults to 5 minutes.
|
|
25
|
-
*/
|
|
26
|
-
autoRefreshTtlMs?: number;
|
|
27
|
-
/**
|
|
28
|
-
* Base URL used when building local file URLs server-side (SSR/RSC).
|
|
29
|
-
* Defaults to window.location.origin in the browser, 'http://localhost:3000'
|
|
30
|
-
* as SSR fallback.
|
|
31
|
-
* @example 'http://localhost:3001'
|
|
32
|
-
*/
|
|
33
|
-
serverBaseUrl?: string;
|
|
34
|
-
/**
|
|
35
|
-
* Preview routes mapping (namespace:key → routes[])
|
|
36
|
-
* Used for in-context preview of translations in the CMS
|
|
37
|
-
* @example { 'home:hero.title': ['/en', '/nl'], 'about:page.title': ['/en/about', '/nl/about'] }
|
|
38
|
-
*/
|
|
39
|
-
previewRoutes?: Record<string, string[]>;
|
|
40
|
-
}
|
|
41
|
-
export interface TranslationResponse {
|
|
42
|
-
[key: string]: string;
|
|
43
|
-
}
|
|
44
|
-
export interface NamespacedTranslations {
|
|
45
|
-
[namespace: string]: TranslationResponse;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Type-safe namespaced key: "namespace:key"
|
|
49
|
-
* Ensures keys are always prefixed with explicit namespace
|
|
50
|
-
*/
|
|
51
|
-
type NamespacedKey<Ns extends string> = `${Ns}:${string}`;
|
|
52
|
-
/**
|
|
53
|
-
* Type-safe keys for single or multiple namespaces
|
|
54
|
-
*/
|
|
55
|
-
type NamespacedKeys<Ns extends string | readonly string[]> = Ns extends string ? NamespacedKey<Ns> : Ns extends readonly (infer N extends string)[] ? NamespacedKey<N> : never;
|
|
56
|
-
/**
|
|
57
|
-
* Translation options — mirrors i18next TOptions for compatibility.
|
|
58
|
-
* Supports interpolation variables, count (plurals), and defaultValue.
|
|
59
|
-
*/
|
|
60
|
-
export type TOptions = Record<string, unknown> & {
|
|
61
|
-
count?: number;
|
|
62
|
-
defaultValue?: string;
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* Translation function with namespace type safety
|
|
66
|
-
*/
|
|
67
|
-
type TranslationFunction<Ns extends string | readonly string[]> = (key: NamespacedKeys<Ns>, options?: TOptions) => string;
|
|
68
|
-
export declare class CMSClient {
|
|
69
|
-
private config;
|
|
70
|
-
/**
|
|
71
|
-
* In-flight request cache for deduplication.
|
|
72
|
-
* Key: `${locale}::${namespaces.join(',')}` → pending Promise.
|
|
73
|
-
* Cleared when the request settles so the next call can re-fetch.
|
|
74
|
-
*/
|
|
75
|
-
private _inFlight;
|
|
76
|
-
constructor(config: CMSConfig);
|
|
77
|
-
/**
|
|
78
|
-
* Fetch raw translations for a namespace (or multiple namespaces).
|
|
79
|
-
* Deduplicated — concurrent calls for the same locale+namespace share one request.
|
|
80
|
-
*
|
|
81
|
-
* @internal Prefer `getTranslation(ns)` or `useTranslation(ns)` instead.
|
|
82
|
-
*/
|
|
83
|
-
getTranslations(namespace: string | string[], locale?: string): Promise<TranslationResponse>;
|
|
84
|
-
/**
|
|
85
|
-
* Internal: actually performs the fetch (called once per unique in-flight key).
|
|
86
|
-
*/
|
|
87
|
-
private _fetchTranslations;
|
|
88
|
-
/**
|
|
89
|
-
* Fetch all requested namespaces from a single locale file.
|
|
90
|
-
* Local file format: { namespace: { key: value } }
|
|
91
|
-
* Compatible with dictionaries/{lng}.json written by the pull command.
|
|
92
|
-
*/
|
|
93
|
-
private _fetchFromLocalFile;
|
|
94
|
-
/**
|
|
95
|
-
* Fetch all namespaces for a locale (defaults to `config.defaultLocale`).
|
|
96
|
-
*/
|
|
97
|
-
getAllNamespaces(locale?: string): Promise<NamespacedTranslations>;
|
|
98
|
-
/**
|
|
99
|
-
* Get a type-safe translation function for use in Server Components and
|
|
100
|
-
* async contexts. Mirrors `getTranslation(ns)` from `@/lib/i18n/server` —
|
|
101
|
-
* namespace comes first, locale is optional (defaults to `config.defaultLocale`).
|
|
102
|
-
*
|
|
103
|
-
* For React client components use `useTranslation` from `@translation-cms/sync/react`.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* // Single namespace — uses defaultLocale
|
|
107
|
-
* const { t, tDynamic } = await client.getTranslation("post");
|
|
108
|
-
* t("post:first_post.title"); // ✓
|
|
109
|
-
* t("common:submit"); // ✗ Type error
|
|
110
|
-
*
|
|
111
|
-
* // Single namespace — explicit locale
|
|
112
|
-
* const { t, tDynamic } = await client.getTranslation("post", "en");
|
|
113
|
-
*
|
|
114
|
-
* // Multiple namespaces
|
|
115
|
-
* const { t, tDynamic } = await client.getTranslation(["post", "common"]);
|
|
116
|
-
* t("post:first_post.title"); // ✓
|
|
117
|
-
* t("common:submit"); // ✓
|
|
118
|
-
*
|
|
119
|
-
* // tDynamic for runtime-determined keys
|
|
120
|
-
* const post = { titleKey: 'post:title' };
|
|
121
|
-
* tDynamic(post.titleKey); // ✓ Works with string type
|
|
122
|
-
*
|
|
123
|
-
* // Interpolation and plurals — same as real t()
|
|
124
|
-
* t("common:greeting", { name: "Rick" }); // "Hello Rick"
|
|
125
|
-
* t("common:items", { count: 3 }); // "3 items"
|
|
126
|
-
*/
|
|
127
|
-
getTranslation(): Promise<{
|
|
128
|
-
t: TranslationFunction<'default'>;
|
|
129
|
-
tDynamic: (key: string, options?: TOptions) => string;
|
|
130
|
-
}>;
|
|
131
|
-
getTranslation<Ns extends string>(namespace: Ns, locale?: string): Promise<{
|
|
132
|
-
t: TranslationFunction<Ns>;
|
|
133
|
-
tDynamic: (key: string, options?: TOptions) => string;
|
|
134
|
-
}>;
|
|
135
|
-
getTranslation<Ns extends readonly string[]>(namespace: Ns, locale?: string): Promise<{
|
|
136
|
-
t: TranslationFunction<Ns>;
|
|
137
|
-
tDynamic: (key: string, options?: TOptions) => string;
|
|
138
|
-
}>;
|
|
139
|
-
/**
|
|
140
|
-
* Server-side only: check if local files are stale and refresh if needed.
|
|
141
|
-
* Silently skips in browser environments or when autoRefresh is disabled.
|
|
142
|
-
*
|
|
143
|
-
* Uses a stale-while-revalidate strategy:
|
|
144
|
-
* - If local files exist but are stale → serve them immediately, refresh in background.
|
|
145
|
-
* - If no local files exist at all → wait for the initial fetch before continuing.
|
|
146
|
-
* - If files are fresh → return immediately without any network call.
|
|
147
|
-
*/
|
|
148
|
-
private autoRefreshIfStale;
|
|
149
|
-
/**
|
|
150
|
-
* Fetch all translations from the CMS and write them to localDir.
|
|
151
|
-
* Separated from autoRefreshIfStale so it can be called without awaiting
|
|
152
|
-
* (stale-while-revalidate background refresh).
|
|
153
|
-
*/
|
|
154
|
-
private performRefresh;
|
|
155
|
-
private buildHeaders;
|
|
156
|
-
private buildUrl;
|
|
157
|
-
private buildRemoteUrl;
|
|
158
|
-
private getBaseUrl;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Get or create the CMS client singleton
|
|
162
|
-
*/
|
|
163
|
-
export declare function getCMSClient(config?: CMSConfig): CMSClient;
|
|
164
|
-
export {};
|
|
165
|
-
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
DELETED
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
const AUTO_REFRESH_TTL_MS = 5 * 60 * 1000;
|
|
2
|
-
const PULL_META_FILE = '.last-pulled';
|
|
3
|
-
export class CMSClient {
|
|
4
|
-
config;
|
|
5
|
-
/**
|
|
6
|
-
* In-flight request cache for deduplication.
|
|
7
|
-
* Key: `${locale}::${namespaces.join(',')}` → pending Promise.
|
|
8
|
-
* Cleared when the request settles so the next call can re-fetch.
|
|
9
|
-
*/
|
|
10
|
-
_inFlight = new Map();
|
|
11
|
-
constructor(config) {
|
|
12
|
-
this.config = {
|
|
13
|
-
defaultLocale: 'nl',
|
|
14
|
-
fallbackLocale: 'en',
|
|
15
|
-
anonKey: undefined,
|
|
16
|
-
autoRefresh: false,
|
|
17
|
-
autoRefreshTtlMs: AUTO_REFRESH_TTL_MS,
|
|
18
|
-
serverBaseUrl: undefined,
|
|
19
|
-
...config,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Fetch raw translations for a namespace (or multiple namespaces).
|
|
24
|
-
* Deduplicated — concurrent calls for the same locale+namespace share one request.
|
|
25
|
-
*
|
|
26
|
-
* @internal Prefer `getTranslation(ns)` or `useTranslation(ns)` instead.
|
|
27
|
-
*/
|
|
28
|
-
async getTranslations(namespace, locale) {
|
|
29
|
-
const resolvedLocale = locale ?? this.config.defaultLocale;
|
|
30
|
-
const namespaces = Array.isArray(namespace) ? namespace : [namespace];
|
|
31
|
-
const cacheKey = `${resolvedLocale}::${[...namespaces].sort().join(',')}`;
|
|
32
|
-
const existing = this._inFlight.get(cacheKey);
|
|
33
|
-
if (existing)
|
|
34
|
-
return existing;
|
|
35
|
-
const promise = this._fetchTranslations(resolvedLocale, namespaces);
|
|
36
|
-
this._inFlight.set(cacheKey, promise);
|
|
37
|
-
promise.finally(() => this._inFlight.delete(cacheKey));
|
|
38
|
-
return promise;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Internal: actually performs the fetch (called once per unique in-flight key).
|
|
42
|
-
*/
|
|
43
|
-
async _fetchTranslations(locale, namespaces) {
|
|
44
|
-
await this.autoRefreshIfStale();
|
|
45
|
-
const useLocal = typeof process !== 'undefined' &&
|
|
46
|
-
process.env.NEXT_PUBLIC_USE_LOCAL_TRANSLATIONS === 'true';
|
|
47
|
-
if (useLocal) {
|
|
48
|
-
return this._fetchFromLocalFile(locale, namespaces);
|
|
49
|
-
}
|
|
50
|
-
const result = {};
|
|
51
|
-
for (const ns of namespaces) {
|
|
52
|
-
const url = this.buildRemoteUrl(locale, ns);
|
|
53
|
-
const headers = this.buildHeaders();
|
|
54
|
-
const urlString = url.toString();
|
|
55
|
-
try {
|
|
56
|
-
const response = await fetch(urlString, {
|
|
57
|
-
method: 'GET',
|
|
58
|
-
headers,
|
|
59
|
-
});
|
|
60
|
-
if (response.status === 404) {
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
if (!response.ok) {
|
|
64
|
-
throw new Error(`CMS API error: ${response.status} ${response.statusText}`);
|
|
65
|
-
}
|
|
66
|
-
const data = (await response.json());
|
|
67
|
-
Object.assign(result, data);
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
console.error(`Failed to fetch translations for ${locale}/${ns} (${urlString}):`, error instanceof Error ? error.message : String(error));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return result;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Fetch all requested namespaces from a single locale file.
|
|
77
|
-
* Local file format: { namespace: { key: value } }
|
|
78
|
-
* Compatible with dictionaries/{lng}.json written by the pull command.
|
|
79
|
-
*/
|
|
80
|
-
async _fetchFromLocalFile(locale, namespaces) {
|
|
81
|
-
const basePath = this.config.localePath ?? '/dictionaries';
|
|
82
|
-
const url = new URL(`${basePath}/${locale}.json`, this.getBaseUrl());
|
|
83
|
-
const urlString = url.toString();
|
|
84
|
-
try {
|
|
85
|
-
const response = await fetch(urlString, { method: 'GET' });
|
|
86
|
-
if (response.status === 404) {
|
|
87
|
-
return {};
|
|
88
|
-
}
|
|
89
|
-
if (!response.ok) {
|
|
90
|
-
throw new Error(`Failed to load local translations (${response.status}): ${urlString}`);
|
|
91
|
-
}
|
|
92
|
-
const data = (await response.json());
|
|
93
|
-
const result = {};
|
|
94
|
-
for (const ns of namespaces) {
|
|
95
|
-
const nsData = data[ns] ?? {};
|
|
96
|
-
for (const [key, value] of Object.entries(nsData)) {
|
|
97
|
-
result[`${ns}:${key}`] = value;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return result;
|
|
101
|
-
}
|
|
102
|
-
catch (error) {
|
|
103
|
-
console.error(`Failed to fetch local translations (${urlString}):`, error instanceof Error ? error.message : String(error));
|
|
104
|
-
return {};
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Fetch all namespaces for a locale (defaults to `config.defaultLocale`).
|
|
109
|
-
*/
|
|
110
|
-
async getAllNamespaces(locale) {
|
|
111
|
-
const resolvedLocale = locale ?? this.config.defaultLocale;
|
|
112
|
-
await this.autoRefreshIfStale();
|
|
113
|
-
const url = this.buildUrl(resolvedLocale, '*');
|
|
114
|
-
const headers = this.buildHeaders();
|
|
115
|
-
try {
|
|
116
|
-
const response = await fetch(url.toString(), {
|
|
117
|
-
method: 'GET',
|
|
118
|
-
headers,
|
|
119
|
-
});
|
|
120
|
-
if (!response.ok) {
|
|
121
|
-
throw new Error(`CMS API error: ${response.status} ${response.statusText}`);
|
|
122
|
-
}
|
|
123
|
-
const data = await response.json();
|
|
124
|
-
return (data || {});
|
|
125
|
-
}
|
|
126
|
-
catch (error) {
|
|
127
|
-
console.error(`Failed to fetch all namespaces for ${resolvedLocale}:`, error instanceof Error ? error.message : String(error));
|
|
128
|
-
return {};
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
async getTranslation(namespace, locale) {
|
|
132
|
-
const translations = await this.getTranslations(namespace ?? 'default', locale);
|
|
133
|
-
const isDev = typeof process !== 'undefined' &&
|
|
134
|
-
process.env.NODE_ENV === 'development';
|
|
135
|
-
const resolve = (key, options) => {
|
|
136
|
-
// Plural key selection: try count-specific suffix first
|
|
137
|
-
let resolvedKey = key;
|
|
138
|
-
if (options && typeof options.count === 'number') {
|
|
139
|
-
const count = options.count;
|
|
140
|
-
const suffix = count === 0 ? '_zero' : count === 1 ? '_one' : '_other';
|
|
141
|
-
const pluralKey = `${key}${suffix}`;
|
|
142
|
-
if (pluralKey in translations) {
|
|
143
|
-
resolvedKey = pluralKey;
|
|
144
|
-
}
|
|
145
|
-
else if (`${key}_other` in translations) {
|
|
146
|
-
resolvedKey = `${key}_other`;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
let value;
|
|
150
|
-
if (resolvedKey in translations) {
|
|
151
|
-
value = translations[resolvedKey];
|
|
152
|
-
}
|
|
153
|
-
else if (key in translations) {
|
|
154
|
-
value = translations[key];
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
if (isDev) {
|
|
158
|
-
// eslint-disable-next-line no-console
|
|
159
|
-
console.warn(`[CMS] Missing translation key "${key}" — will be auto-added to the CMS on next sync.`);
|
|
160
|
-
}
|
|
161
|
-
value = options?.defaultValue ?? key;
|
|
162
|
-
}
|
|
163
|
-
// Interpolate {{variable}} placeholders (i18next default format)
|
|
164
|
-
if (options) {
|
|
165
|
-
value = value.replace(/\{\{(\w+)\}\}/g, (_, varKey) => varKey in options
|
|
166
|
-
? String(options[varKey])
|
|
167
|
-
: `{{${varKey}}}`);
|
|
168
|
-
}
|
|
169
|
-
return value;
|
|
170
|
-
};
|
|
171
|
-
const t = ((key, options) => resolve(key, options));
|
|
172
|
-
// tDynamic: loose variant for keys from variables/databases
|
|
173
|
-
const tDynamic = (key, options) => resolve(key, options);
|
|
174
|
-
return { t, tDynamic };
|
|
175
|
-
}
|
|
176
|
-
// =========================================================================
|
|
177
|
-
// Private methods
|
|
178
|
-
// =========================================================================
|
|
179
|
-
/**
|
|
180
|
-
* Server-side only: check if local files are stale and refresh if needed.
|
|
181
|
-
* Silently skips in browser environments or when autoRefresh is disabled.
|
|
182
|
-
*
|
|
183
|
-
* Uses a stale-while-revalidate strategy:
|
|
184
|
-
* - If local files exist but are stale → serve them immediately, refresh in background.
|
|
185
|
-
* - If no local files exist at all → wait for the initial fetch before continuing.
|
|
186
|
-
* - If files are fresh → return immediately without any network call.
|
|
187
|
-
*/
|
|
188
|
-
async autoRefreshIfStale() {
|
|
189
|
-
if (!this.config.autoRefresh)
|
|
190
|
-
return;
|
|
191
|
-
if (!this.config.localDir)
|
|
192
|
-
return;
|
|
193
|
-
// Only run in Node.js
|
|
194
|
-
if (typeof process === 'undefined' || !process.versions?.node)
|
|
195
|
-
return;
|
|
196
|
-
try {
|
|
197
|
-
const { default: fs } = await import('fs');
|
|
198
|
-
const { default: path } = await import('path');
|
|
199
|
-
const metaPath = path.join(this.config.localDir, PULL_META_FILE);
|
|
200
|
-
let lastPulled = 0;
|
|
201
|
-
const metaExists = fs.existsSync(metaPath);
|
|
202
|
-
if (metaExists) {
|
|
203
|
-
const ts = new Date(fs.readFileSync(metaPath, 'utf-8').trim()).getTime();
|
|
204
|
-
if (!isNaN(ts))
|
|
205
|
-
lastPulled = ts;
|
|
206
|
-
}
|
|
207
|
-
const ttl = this.config.autoRefreshTtlMs;
|
|
208
|
-
const age = Date.now() - lastPulled;
|
|
209
|
-
const isStale = age >= ttl;
|
|
210
|
-
if (!isStale) {
|
|
211
|
-
const ageSeconds = Math.round(age / 1000);
|
|
212
|
-
const ttlSeconds = Math.round(ttl / 1000);
|
|
213
|
-
console.log(`[CMS] ✓ Translations fresh (age: ${ageSeconds}s < TTL: ${ttlSeconds}s) — using local files`);
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
const hasLocalFiles = metaExists;
|
|
217
|
-
if (hasLocalFiles) {
|
|
218
|
-
// Stale-while-revalidate: serve existing files immediately,
|
|
219
|
-
// refresh in the background without blocking the caller.
|
|
220
|
-
const ageSeconds = Math.round(age / 1000);
|
|
221
|
-
const ttlSeconds = Math.round(ttl / 1000);
|
|
222
|
-
console.log(`[CMS] ⟳ Stale (age: ${ageSeconds}s ≥ TTL: ${ttlSeconds}s) — serving cached, refreshing in background...`);
|
|
223
|
-
void this.performRefresh();
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
// No local files at all — must wait for initial fetch.
|
|
227
|
-
console.log(`[CMS] ⟳ No local files found — fetching from CMS...`);
|
|
228
|
-
await this.performRefresh();
|
|
229
|
-
}
|
|
230
|
-
catch (error) {
|
|
231
|
-
console.error(`[CMS] ✗ Auto-refresh check failed:`, error instanceof Error ? error.message : String(error));
|
|
232
|
-
// Silently fail — existing files remain
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Fetch all translations from the CMS and write them to localDir.
|
|
237
|
-
* Separated from autoRefreshIfStale so it can be called without awaiting
|
|
238
|
-
* (stale-while-revalidate background refresh).
|
|
239
|
-
*/
|
|
240
|
-
async performRefresh() {
|
|
241
|
-
if (!this.config.localDir)
|
|
242
|
-
return;
|
|
243
|
-
try {
|
|
244
|
-
const { default: fs } = await import('fs');
|
|
245
|
-
const { default: path } = await import('path');
|
|
246
|
-
const url = `${this.config.cmsUrl.replace(/\/$/, '')}/api/translations/${this.config.projectId}`;
|
|
247
|
-
console.log(`[CMS] Fetching from: ${url}`);
|
|
248
|
-
const response = await fetch(url, {
|
|
249
|
-
headers: this.config.anonKey
|
|
250
|
-
? { 'x-api-key': this.config.anonKey }
|
|
251
|
-
: {},
|
|
252
|
-
});
|
|
253
|
-
if (!response.ok) {
|
|
254
|
-
console.warn(`[CMS] ✗ Refresh failed: ${response.status} ${response.statusText}`);
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
const data = (await response.json());
|
|
258
|
-
let fileCount = 0;
|
|
259
|
-
const localDir = this.config.localDir;
|
|
260
|
-
// Write single file per locale: {localDir}/{locale}.json
|
|
261
|
-
// Structure: { namespace: { key: value } }
|
|
262
|
-
// Compatible with dictionaries/{lng}.json pattern
|
|
263
|
-
fs.mkdirSync(localDir, { recursive: true });
|
|
264
|
-
for (const [locale, namespaces] of Object.entries(data)) {
|
|
265
|
-
fs.writeFileSync(path.join(localDir, `${locale}.json`), JSON.stringify(namespaces, null, 2), 'utf-8');
|
|
266
|
-
fileCount++;
|
|
267
|
-
}
|
|
268
|
-
const metaPath = path.join(localDir, PULL_META_FILE);
|
|
269
|
-
fs.writeFileSync(metaPath, new Date().toISOString(), 'utf-8');
|
|
270
|
-
console.log(`[CMS] ✓ Refresh complete: wrote ${fileCount} JSON files, updated ${PULL_META_FILE}`);
|
|
271
|
-
}
|
|
272
|
-
catch (error) {
|
|
273
|
-
console.error(`[CMS] ✗ Refresh failed:`, error instanceof Error ? error.message : String(error));
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
buildHeaders() {
|
|
277
|
-
const headers = {
|
|
278
|
-
'Content-Type': 'application/json',
|
|
279
|
-
};
|
|
280
|
-
if (this.config.anonKey) {
|
|
281
|
-
headers['x-api-key'] = this.config.anonKey;
|
|
282
|
-
}
|
|
283
|
-
return headers;
|
|
284
|
-
}
|
|
285
|
-
buildUrl(locale, namespace) {
|
|
286
|
-
return this.buildRemoteUrl(locale, namespace);
|
|
287
|
-
}
|
|
288
|
-
buildRemoteUrl(locale, namespace) {
|
|
289
|
-
const path = namespace === '*'
|
|
290
|
-
? `/api/translations/${this.config.projectId}/${locale}`
|
|
291
|
-
: `/api/translations/${this.config.projectId}/${locale}/${namespace}`;
|
|
292
|
-
return new URL(path, this.config.cmsUrl);
|
|
293
|
-
}
|
|
294
|
-
getBaseUrl() {
|
|
295
|
-
// Explicit override takes highest priority
|
|
296
|
-
if (this.config.serverBaseUrl) {
|
|
297
|
-
return this.config.serverBaseUrl;
|
|
298
|
-
}
|
|
299
|
-
const globalObj = globalThis;
|
|
300
|
-
if (globalObj.window &&
|
|
301
|
-
typeof globalObj.window === 'object' &&
|
|
302
|
-
'location' in globalObj.window) {
|
|
303
|
-
const win = globalObj.window;
|
|
304
|
-
return win.location.origin;
|
|
305
|
-
}
|
|
306
|
-
// SSR fallback: prefer PORT env var so non-3000 setups work
|
|
307
|
-
const port = (typeof process !== 'undefined' && process.env['PORT']) || '3000';
|
|
308
|
-
return `http://localhost:${port}`;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
// =========================================================================
|
|
312
|
-
// Singleton factory
|
|
313
|
-
// =========================================================================
|
|
314
|
-
let cmsClient = null;
|
|
315
|
-
/**
|
|
316
|
-
* Get or create the CMS client singleton
|
|
317
|
-
*/
|
|
318
|
-
export function getCMSClient(config) {
|
|
319
|
-
if (config) {
|
|
320
|
-
return new CMSClient(config);
|
|
321
|
-
}
|
|
322
|
-
if (!cmsClient) {
|
|
323
|
-
cmsClient = new CMSClient(resolveConfig());
|
|
324
|
-
}
|
|
325
|
-
return cmsClient;
|
|
326
|
-
}
|
|
327
|
-
/**
|
|
328
|
-
* Resolve CMS configuration from environment variables
|
|
329
|
-
*/
|
|
330
|
-
function resolveConfig() {
|
|
331
|
-
const cmsUrl = getEnvVar('NEXT_PUBLIC_CMS_URL');
|
|
332
|
-
const projectId = getEnvVar('NEXT_PUBLIC_CMS_PROJECT_ID');
|
|
333
|
-
const anonKey = getEnvVar('NEXT_PUBLIC_CMS_ANON_KEY');
|
|
334
|
-
if (!cmsUrl || !projectId) {
|
|
335
|
-
throw new Error('CMS configuration missing. Please set NEXT_PUBLIC_CMS_URL and NEXT_PUBLIC_CMS_PROJECT_ID in your .env.local file');
|
|
336
|
-
}
|
|
337
|
-
return {
|
|
338
|
-
cmsUrl,
|
|
339
|
-
projectId,
|
|
340
|
-
anonKey,
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Safely get environment variable (works in Node.js and browser).
|
|
345
|
-
* Uses static references for NEXT_PUBLIC_* vars because Next.js only inlines
|
|
346
|
-
* those at build time when accessed via literal property notation.
|
|
347
|
-
*/
|
|
348
|
-
function getEnvVar(key) {
|
|
349
|
-
// Static references required for Next.js NEXT_PUBLIC_* browser inlining
|
|
350
|
-
switch (key) {
|
|
351
|
-
case 'NEXT_PUBLIC_CMS_URL':
|
|
352
|
-
return process.env.NEXT_PUBLIC_CMS_URL;
|
|
353
|
-
case 'NEXT_PUBLIC_CMS_PROJECT_ID':
|
|
354
|
-
return process.env.NEXT_PUBLIC_CMS_PROJECT_ID;
|
|
355
|
-
case 'NEXT_PUBLIC_CMS_ANON_KEY':
|
|
356
|
-
return process.env.NEXT_PUBLIC_CMS_ANON_KEY;
|
|
357
|
-
default:
|
|
358
|
-
if (typeof process !== 'undefined' && process.env) {
|
|
359
|
-
return process.env[key];
|
|
360
|
-
}
|
|
361
|
-
return undefined;
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
//# sourceMappingURL=client.js.map
|