intor 2.3.13 → 2.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/export/index.js +1 -2
- package/dist/core/src/config/define-intor-config.js +0 -3
- package/dist/core/src/config/resolvers/resolve-cookie-options.js +0 -1
- package/dist/core/src/config/resolvers/resolve-fallback-locales.js +1 -2
- package/dist/core/src/config/resolvers/resolve-routing-options.js +0 -2
- package/dist/core/src/config/validators/validate-default-locale.js +0 -1
- package/dist/core/src/config/validators/validate-id.js +0 -1
- package/dist/core/src/config/validators/validate-supported-locales.js +0 -1
- package/dist/core/src/core/messages/global-messages-pool.js +11 -17
- package/dist/core/src/core/messages/load-remote-messages/load-remote-messages.js +1 -40
- package/dist/core/src/core/messages/utils/is-valid-messages.js +23 -15
- package/dist/core/src/routing/pathname/get-unprefixed-pathname.js +0 -1
- package/dist/core/src/routing/pathname/locale-prefix-pathname.js +0 -1
- package/dist/core/src/routing/pathname/standardize-pathname.js +0 -1
- package/dist/core/src/server/helpers/get-translator.js +3 -2
- package/dist/core/src/server/helpers/local-messages-from-url.js +1 -1
- package/dist/core/src/server/intor/intor.js +0 -1
- package/dist/core/src/server/messages/load-local-messages/load-local-messages.js +11 -12
- package/dist/core/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +6 -6
- package/dist/core/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +14 -6
- package/dist/core/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +3 -3
- package/dist/core/src/server/messages/load-messages.js +8 -12
- package/dist/core/src/server/runtime/create-intor-runtime.js +12 -8
- package/dist/core/src/server/translator/create-translator.js +1 -0
- package/dist/express/src/adapters/express/helpers/get-translator.js +3 -4
- package/dist/express/src/adapters/express/middleware/create-intor.js +5 -5
- package/dist/express/src/core/messages/global-messages-pool.js +9 -3
- package/dist/express/src/core/messages/load-remote-messages/load-remote-messages.js +1 -40
- package/dist/express/src/core/messages/utils/is-valid-messages.js +23 -15
- package/dist/express/src/routing/inbound/resolve-inbound.js +5 -6
- package/dist/express/src/routing/inbound/resolve-locale/resolve-locale.js +13 -6
- package/dist/express/src/routing/locale/get-locale-from-accept-language.js +7 -17
- package/dist/express/src/routing/locale/get-locale-from-host.js +13 -15
- package/dist/express/src/routing/locale/get-locale-from-pathname.js +4 -14
- package/dist/express/src/routing/locale/get-locale-from-query.js +10 -17
- package/dist/express/src/routing/pathname/get-unprefixed-pathname.js +0 -1
- package/dist/express/src/routing/pathname/locale-prefix-pathname.js +0 -1
- package/dist/express/src/routing/pathname/standardize-pathname.js +0 -1
- package/dist/express/src/server/helpers/get-translator.js +3 -2
- package/dist/express/src/server/messages/load-local-messages/load-local-messages.js +11 -12
- package/dist/express/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +6 -6
- package/dist/express/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +14 -6
- package/dist/express/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +3 -3
- package/dist/express/src/server/messages/load-messages.js +8 -12
- package/dist/express/src/server/runtime/create-intor-runtime.js +12 -8
- package/dist/express/src/server/translator/create-translator.js +1 -0
- package/dist/next/src/adapters/next/navigation/redirect.js +0 -1
- package/dist/next/src/adapters/next/navigation/use-pathname.js +0 -1
- package/dist/next/src/adapters/next/proxy/intor-proxy.js +1 -2
- package/dist/next/src/adapters/next/server/get-locale.js +0 -1
- package/dist/next/src/adapters/next/server/get-pathname.js +0 -1
- package/dist/next/src/adapters/next/server/get-translator.js +3 -4
- package/dist/next/src/adapters/next/server/intor.js +2 -3
- package/dist/next/src/core/messages/global-messages-pool.js +9 -3
- package/dist/next/src/core/messages/load-remote-messages/load-remote-messages.js +1 -40
- package/dist/next/src/core/messages/utils/is-valid-messages.js +23 -15
- package/dist/next/src/policies/shoud-full-reload.js +0 -1
- package/dist/next/src/routing/inbound/resolve-inbound.js +5 -6
- package/dist/next/src/routing/inbound/resolve-locale/resolve-locale.js +13 -6
- package/dist/next/src/routing/locale/get-locale-from-accept-language.js +7 -17
- package/dist/next/src/routing/locale/get-locale-from-host.js +13 -15
- package/dist/next/src/routing/locale/get-locale-from-pathname.js +4 -14
- package/dist/next/src/routing/locale/get-locale-from-query.js +10 -17
- package/dist/next/src/routing/pathname/get-unprefixed-pathname.js +0 -1
- package/dist/next/src/routing/pathname/locale-prefix-pathname.js +0 -1
- package/dist/next/src/routing/pathname/standardize-pathname.js +0 -1
- package/dist/next/src/server/helpers/get-translator.js +3 -2
- package/dist/next/src/server/intor/intor.js +0 -1
- package/dist/next/src/server/messages/load-local-messages/load-local-messages.js +11 -12
- package/dist/next/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +6 -6
- package/dist/next/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +14 -6
- package/dist/next/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +3 -3
- package/dist/next/src/server/messages/load-messages.js +8 -12
- package/dist/next/src/server/runtime/create-intor-runtime.js +12 -8
- package/dist/next/src/server/translator/create-translator.js +1 -0
- package/dist/react/src/client/react/helpers/use-runtime-state.js +0 -1
- package/dist/react/src/client/react/navigation/use-execute-navigation.js +0 -1
- package/dist/react/src/client/react/navigation/use-resolve-navigation.js +0 -1
- package/dist/react/src/client/react/provider/effects/use-locale-effects.js +0 -1
- package/dist/react/src/client/react/translator/use-translator.js +1 -0
- package/dist/react/src/client/shared/helpers/get-client-locale.js +0 -1
- package/dist/react/src/client/shared/messages/create-refetch-messages.js +0 -3
- package/dist/react/src/core/messages/load-remote-messages/load-remote-messages.js +1 -40
- package/dist/react/src/core/messages/utils/is-valid-messages.js +23 -15
- package/dist/react/src/policies/shoud-full-reload.js +0 -1
- package/dist/react/src/routing/pathname/get-unprefixed-pathname.js +0 -1
- package/dist/react/src/routing/pathname/locale-prefix-pathname.js +0 -1
- package/dist/react/src/routing/pathname/standardize-pathname.js +0 -1
- package/dist/svelte/src/client/shared/helpers/get-client-locale.js +0 -1
- package/dist/svelte/src/client/shared/messages/create-refetch-messages.js +0 -3
- package/dist/svelte/src/client/svelte/helpers/create-runtime-state.js +0 -1
- package/dist/svelte/src/client/svelte/runtime/create-intor-api.js +4 -0
- package/dist/svelte/src/client/svelte/runtime/create-intor.js +2 -1
- package/dist/svelte/src/client/svelte/runtime/effects/locale-effects.js +0 -1
- package/dist/svelte/src/core/messages/load-remote-messages/load-remote-messages.js +1 -40
- package/dist/svelte/src/core/messages/utils/is-valid-messages.js +23 -15
- package/dist/types/export/index.d.ts +2 -2
- package/dist/types/src/adapters/express/global.d.ts +2 -1
- package/dist/types/src/adapters/express/helpers/get-translator.d.ts +1 -1
- package/dist/types/src/adapters/next/server/get-translator.d.ts +1 -1
- package/dist/types/src/adapters/next/server/intor.d.ts +2 -2
- package/dist/types/src/client/svelte/runtime/create-intor-api.d.ts +2 -0
- package/dist/types/src/client/svelte/runtime/types.d.ts +3 -1
- package/dist/types/src/client/vue/provider/resolver/resolve-runtime.d.ts +1 -1
- package/dist/types/src/config/constants/index.d.ts +0 -1
- package/dist/types/src/config/index.d.ts +2 -2
- package/dist/types/src/config/types/index.d.ts +0 -1
- package/dist/types/src/config/types/intor-config.d.ts +0 -4
- package/dist/types/src/core/index.d.ts +1 -1
- package/dist/types/src/core/messages/global-messages-pool.d.ts +15 -12
- package/dist/types/src/core/messages/index.d.ts +2 -2
- package/dist/types/src/core/messages/load-remote-messages/load-remote-messages.d.ts +1 -2
- package/dist/types/src/core/messages/load-remote-messages/types.d.ts +1 -6
- package/dist/types/src/core/messages/types.d.ts +14 -36
- package/dist/types/src/core/messages/utils/is-valid-messages.d.ts +5 -10
- package/dist/types/src/core/types/translator-instance.d.ts +3 -1
- package/dist/types/src/routing/inbound/resolve-locale/resolve-locale.d.ts +4 -3
- package/dist/types/src/routing/locale/get-locale-from-accept-language.d.ts +5 -7
- package/dist/types/src/routing/locale/get-locale-from-host.d.ts +12 -8
- package/dist/types/src/routing/locale/get-locale-from-pathname.d.ts +4 -13
- package/dist/types/src/routing/locale/get-locale-from-query.d.ts +9 -10
- package/dist/types/src/server/helpers/get-translator.d.ts +2 -3
- package/dist/types/src/server/messages/load-local-messages/load-local-messages.d.ts +2 -2
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.d.ts +2 -2
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/types.d.ts +4 -3
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.d.ts +2 -2
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.d.ts +2 -2
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.d.ts +1 -1
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/types.d.ts +2 -2
- package/dist/types/src/server/messages/load-local-messages/types.d.ts +2 -2
- package/dist/types/src/server/messages/load-messages.d.ts +1 -1
- package/dist/types/src/server/messages/types.d.ts +2 -2
- package/dist/types/src/server/runtime/types.d.ts +2 -2
- package/dist/types/src/server/translator/create-translator.d.ts +1 -0
- package/dist/vue/src/client/shared/helpers/get-client-locale.js +0 -1
- package/dist/vue/src/client/shared/messages/create-refetch-messages.js +0 -3
- package/dist/vue/src/client/vue/helpers/use-runtime-state.js +0 -1
- package/dist/vue/src/client/vue/provider/effects/use-locale-effects.js +0 -1
- package/dist/vue/src/client/vue/translator/use-translator.js +3 -1
- package/dist/vue/src/core/messages/load-remote-messages/load-remote-messages.js +1 -40
- package/dist/vue/src/core/messages/utils/is-valid-messages.js +23 -15
- package/package.json +3 -4
- package/dist/core/src/config/constants/cache.js +0 -7
- package/dist/core/src/config/resolvers/resolve-cache-options.js +0 -11
- package/dist/react/src/core/utils/normalizers/normalize-cache-key.js +0 -45
- package/dist/svelte/src/core/utils/normalizers/normalize-cache-key.js +0 -45
- package/dist/types/src/config/constants/cache.d.ts +0 -2
- package/dist/types/src/config/resolvers/resolve-cache-options.d.ts +0 -2
- package/dist/types/src/config/types/cache.d.ts +0 -7
- package/dist/vue/src/core/utils/normalizers/normalize-cache-key.js +0 -45
|
@@ -2,7 +2,6 @@ import { shouldPersist } from '../../../../policies/should-persist.js';
|
|
|
2
2
|
import { shouldPersistOnFirstVisit } from '../../../../policies/should-persist-on-first-visit.js';
|
|
3
3
|
import '../../../../core/error/intor-error.js';
|
|
4
4
|
import 'logry';
|
|
5
|
-
import 'keyv';
|
|
6
5
|
import { getLocaleCookieBrowser } from '../../../shared/utils/locale/get-locale-cookie-browser.js';
|
|
7
6
|
import { setLocaleCookieBrowser } from '../../../shared/utils/locale/set-locale-cookie-browser.js';
|
|
8
7
|
import { setDocumentLocale } from '../../../shared/utils/locale/set-document-locale.js';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { getLogger } from '../../logger/get-logger.js';
|
|
2
|
-
import { normalizeCacheKey } from '../../utils/normalizers/normalize-cache-key.js';
|
|
3
2
|
import { fetchLocaleMessages } from './fetch-locale-messages/fetch-locale-messages.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
@@ -9,12 +8,11 @@ import { fetchLocaleMessages } from './fetch-locale-messages/fetch-locale-messag
|
|
|
9
8
|
* It coordinates:
|
|
10
9
|
*
|
|
11
10
|
* - Locale resolution with fallbacks
|
|
12
|
-
* - Cache read / write behavior
|
|
13
11
|
* - Respecting abort signals across the entire async flow
|
|
14
12
|
*
|
|
15
13
|
* Network fetching and data validation are delegated to lower-level utilities.
|
|
16
14
|
*/
|
|
17
|
-
const loadRemoteMessages = async ({
|
|
15
|
+
const loadRemoteMessages = async ({ locale, fallbackLocales, namespaces, rootDir, url, headers, signal, loggerOptions, }) => {
|
|
18
16
|
const baseLogger = getLogger(loggerOptions);
|
|
19
17
|
const logger = baseLogger.child({ scope: "load-remote-messages" });
|
|
20
18
|
// Abort early if the request has already been cancelled
|
|
@@ -25,31 +23,6 @@ const loadRemoteMessages = async ({ id, locale, fallbackLocales, namespaces, roo
|
|
|
25
23
|
const start = performance.now();
|
|
26
24
|
logger.debug("Loading remote messages.", { url });
|
|
27
25
|
// ---------------------------------------------------------------------------
|
|
28
|
-
// Cache key resolution
|
|
29
|
-
// ---------------------------------------------------------------------------
|
|
30
|
-
const cacheKey = normalizeCacheKey([
|
|
31
|
-
id,
|
|
32
|
-
"loaderType:remote",
|
|
33
|
-
rootDir,
|
|
34
|
-
locale,
|
|
35
|
-
(fallbackLocales || []).toSorted().join(","),
|
|
36
|
-
(namespaces || []).toSorted().join(","),
|
|
37
|
-
]);
|
|
38
|
-
// ---------------------------------------------------------------------------
|
|
39
|
-
// Cache read
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
|
-
if (cacheOptions.enabled && cacheKey) {
|
|
42
|
-
const cached = await pool?.get(cacheKey);
|
|
43
|
-
if (signal?.aborted) {
|
|
44
|
-
logger.debug("Remote message loading aborted after cache read.");
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (cached) {
|
|
48
|
-
logger.debug("Messages cache hit.", { key: cacheKey });
|
|
49
|
-
return cached;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
26
|
// Resolve locale messages with ordered fallback strategy
|
|
54
27
|
// ---------------------------------------------------------------------------
|
|
55
28
|
const candidateLocales = [locale, ...(fallbackLocales || [])];
|
|
@@ -93,18 +66,6 @@ const loadRemoteMessages = async ({ id, locale, fallbackLocales, namespaces, roo
|
|
|
93
66
|
});
|
|
94
67
|
}
|
|
95
68
|
}
|
|
96
|
-
// ---------------------------------------------------------------------------
|
|
97
|
-
// Cache write (explicitly permitted)
|
|
98
|
-
// ---------------------------------------------------------------------------
|
|
99
|
-
if (cacheOptions.enabled && allowCacheWrite) {
|
|
100
|
-
if (signal?.aborted) {
|
|
101
|
-
logger.debug("Remote message loading aborted before cache write.");
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
if (cacheKey && messages) {
|
|
105
|
-
await pool?.set(cacheKey, messages, cacheOptions.ttl);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
69
|
// Final success log with resolved locale and timing
|
|
109
70
|
if (messages) {
|
|
110
71
|
logger.trace("Finished loading remote messages.", {
|
|
@@ -3,15 +3,10 @@ function isPlainObject(value) {
|
|
|
3
3
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
|
-
* Check if a value is a valid
|
|
6
|
+
* Check if a value is a valid MessageObject.
|
|
7
7
|
*
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```ts
|
|
12
|
-
* isValidMessages({ en: { hello: "Hello" } }) // true
|
|
13
|
-
* isValidMessages({ en: { count: 5 } }) // false
|
|
14
|
-
* ```
|
|
8
|
+
* - Supports all MessageValue variants (primitive, array, object).
|
|
9
|
+
* - Uses an iterative approach to avoid stack overflow.
|
|
15
10
|
*/
|
|
16
11
|
function isValidMessages(value) {
|
|
17
12
|
if (!isPlainObject(value))
|
|
@@ -19,16 +14,29 @@ function isValidMessages(value) {
|
|
|
19
14
|
const stack = [value];
|
|
20
15
|
while (stack.length > 0) {
|
|
21
16
|
const current = stack.pop();
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
// primitives are always valid
|
|
18
|
+
if (current === null ||
|
|
19
|
+
typeof current === "string" ||
|
|
20
|
+
typeof current === "number" ||
|
|
21
|
+
typeof current === "boolean") {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
// array → validate each item
|
|
25
|
+
if (Array.isArray(current)) {
|
|
26
|
+
for (const item of current) {
|
|
27
|
+
stack.push(item);
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
// object → validate each value
|
|
32
|
+
if (isPlainObject(current)) {
|
|
33
|
+
for (const v of Object.values(current)) {
|
|
34
|
+
stack.push(v);
|
|
30
35
|
}
|
|
36
|
+
continue;
|
|
31
37
|
}
|
|
38
|
+
// everything else is invalid
|
|
39
|
+
return false;
|
|
32
40
|
}
|
|
33
41
|
return true;
|
|
34
42
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { PREFIX_PLACEHOLDER, IntorError, IntorErrorCode, deepMerge, resolveLoaderOptions, clearLoggerPool, clearMessagesPool,
|
|
1
|
+
export { PREFIX_PLACEHOLDER, IntorError, IntorErrorCode, deepMerge, resolveLoaderOptions, clearLoggerPool, clearMessagesPool, mergeMessages, isValidMessages, type MessagesReader, type MessagesReaders, } from "../src/core";
|
|
2
2
|
export { defineIntorConfig, type IntorRawConfig, type IntorResolvedConfig, } from "../src/config";
|
|
3
3
|
export { localizePathname } from "../src/routing";
|
|
4
|
-
export { Translator, type TranslatorPlugin, type TranslateHandlers, type FormatHandler, type LoadingHandler, type MissingHandler, type HandlerContext, type TranslateContext, type TranslateHook, type LocaleMessages, } from "intor-translator";
|
|
4
|
+
export { Translator, type TranslatorPlugin, type TranslateHandlers, type FormatHandler, type LoadingHandler, type MissingHandler, type HandlerContext, type TranslateContext, type TranslateHook, type LocaleMessages, type MessageObject, type MessageValue, } from "intor-translator";
|
|
@@ -12,8 +12,9 @@ declare global {
|
|
|
12
12
|
};
|
|
13
13
|
locale: string;
|
|
14
14
|
localeSource: RoutingLocaleSource;
|
|
15
|
-
t: TranslatorInstance<LocaleMessages, undefined, "string">["t"];
|
|
16
15
|
hasKey: TranslatorInstance<LocaleMessages, undefined, "string">["hasKey"];
|
|
16
|
+
t: TranslatorInstance<LocaleMessages, undefined, "string">["t"];
|
|
17
|
+
tRaw: TranslatorInstance<LocaleMessages, undefined, "string">["tRaw"];
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
}
|
|
@@ -3,7 +3,7 @@ import type { GenConfigKeys, GenMessages } from "../../../core";
|
|
|
3
3
|
import type { GetTranslatorParams, TranslatorInstanceServer } from "../../../server";
|
|
4
4
|
import type { Request } from "express";
|
|
5
5
|
import type { LocalizedNodeKeys } from "intor-translator";
|
|
6
|
-
type GetTranslatorExpressParams = Omit<GetTranslatorParams, "locale"
|
|
6
|
+
type GetTranslatorExpressParams = Omit<GetTranslatorParams, "locale">;
|
|
7
7
|
/**
|
|
8
8
|
* Get a server-side translator for the current execution context.
|
|
9
9
|
*
|
|
@@ -2,7 +2,7 @@ import type { IntorResolvedConfig } from "../../../config";
|
|
|
2
2
|
import type { GenConfigKeys, GenMessages } from "../../../core";
|
|
3
3
|
import type { GetTranslatorParams, TranslatorInstanceServer } from "../../../server";
|
|
4
4
|
import type { LocalizedNodeKeys } from "intor-translator";
|
|
5
|
-
type GetTranslatorNextParams = Omit<GetTranslatorParams, "locale"
|
|
5
|
+
type GetTranslatorNextParams = Omit<GetTranslatorParams, "locale">;
|
|
6
6
|
/**
|
|
7
7
|
* Get a server-side translator for the current execution context.
|
|
8
8
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IntorResolvedConfig } from "../../../config";
|
|
2
|
-
import type {
|
|
2
|
+
import type { MessagesReaders } from "../../../core";
|
|
3
3
|
import { type GenConfigKeys } from "../../../core";
|
|
4
4
|
import { type IntorResult } from "../../../server";
|
|
5
5
|
/**
|
|
@@ -9,4 +9,4 @@ import { type IntorResult } from "../../../server";
|
|
|
9
9
|
* - Acts as the bootstrap entry where cache writes are permitted.
|
|
10
10
|
* @platform Next.js
|
|
11
11
|
*/
|
|
12
|
-
export declare function intor<CK extends GenConfigKeys = "__default__">(config: IntorResolvedConfig,
|
|
12
|
+
export declare function intor<CK extends GenConfigKeys = "__default__">(config: IntorResolvedConfig, readers?: MessagesReaders): Promise<IntorResult<CK>>;
|
|
@@ -6,8 +6,10 @@ export declare function createIntorApi(translator: Readable<Translator>): {
|
|
|
6
6
|
scoped: (preKey: string) => {
|
|
7
7
|
scoped: /*elided*/ any;
|
|
8
8
|
t: Readable<(key: string, replacements?: Replacement) => string>;
|
|
9
|
+
tRaw: Readable<(key: string, replacements?: Replacement) => import("intor-translator").MessageValue | undefined>;
|
|
9
10
|
tRich: Readable<(key: string, tagRenderers?: SvelteTagRenderers, replacements?: Replacement) => string>;
|
|
10
11
|
};
|
|
11
12
|
t: Readable<(key: string, replacements?: Replacement) => string>;
|
|
13
|
+
tRaw: Readable<(key: string, replacements?: Replacement) => import("intor-translator").MessageValue | undefined>;
|
|
12
14
|
tRich: Readable<(key: string, tagRenderers?: SvelteTagRenderers, replacements?: Replacement) => string>;
|
|
13
15
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SvelteTagRenderers } from "../render";
|
|
2
2
|
import type { BootstrapCore, GenConfigKeys, GenLocale, GenMessages, MessageKey } from "../../../core";
|
|
3
3
|
import type { KeyMode } from "../../../core";
|
|
4
|
-
import type { TranslateHandlers, TranslateHook, TranslatorPlugin } from "intor-translator";
|
|
4
|
+
import type { MessageValue, TranslateHandlers, TranslateHook, TranslatorPlugin } from "intor-translator";
|
|
5
5
|
import type { Readable } from "svelte/store";
|
|
6
6
|
import { type Locale, type LocalizedNodeKeys, type Replacement } from "intor-translator";
|
|
7
7
|
export interface SvelteBootstrap<CK extends GenConfigKeys = "__default__"> extends Omit<BootstrapCore<CK>, "messages"> {
|
|
@@ -27,6 +27,8 @@ export type IntorRuntime<CK extends GenConfigKeys = "__default__", Mode extends
|
|
|
27
27
|
interface ReactiveTranslator<CK extends GenConfigKeys = "__default__", PK extends string | undefined = undefined, Mode extends KeyMode = "auto"> {
|
|
28
28
|
/** Reactive translation function for Svelte templates */
|
|
29
29
|
t: Readable<(key?: MessageKey<GenMessages<CK>, PK, Mode>, replacements?: Replacement) => string>;
|
|
30
|
+
/** Reactive translation function that returns the raw message value. */
|
|
31
|
+
tRaw: Readable<(key?: MessageKey<GenMessages<CK>, PK, Mode>, replacements?: Replacement) => MessageValue | undefined>;
|
|
30
32
|
/** Reactive rich translation function for Svelte templates */
|
|
31
33
|
tRich: Readable<(key: MessageKey<GenMessages<CK>, PK, Mode>, tagRenderers?: SvelteTagRenderers, replacements?: Replacement) => string>;
|
|
32
34
|
}
|
|
@@ -2,7 +2,7 @@ import type { IntorProviderProps } from "../types";
|
|
|
2
2
|
export declare function resolveRuntime(props: IntorProviderProps): {
|
|
3
3
|
config: import("vue").ComputedRef<import("../../../../config").IntorResolvedConfig>;
|
|
4
4
|
locale: import("vue").ComputedRef<string>;
|
|
5
|
-
messages: import("vue").ComputedRef<import("
|
|
5
|
+
messages: import("vue").ComputedRef<import("intor-translator").LocaleMessages | undefined>;
|
|
6
6
|
isLoading: import("vue").ComputedRef<boolean>;
|
|
7
7
|
onLocaleChange: import("vue").ComputedRef<((newLocale: import("../../../../core").GenLocale<"__default__">) => Promise<void> | void) | undefined>;
|
|
8
8
|
handlers: import("vue").Ref<import("intor-translator").TranslateHandlers | undefined, import("intor-translator").TranslateHandlers | undefined> | undefined;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { defineIntorConfig } from "./define-intor-config";
|
|
2
|
-
export { DEFAULT_ROUTING_OPTIONS, DEFAULT_COOKIE_OPTIONS
|
|
3
|
-
export type { IntorRawConfig, IntorResolvedConfig, LoaderOptions, RemoteHeaders, TranslatorOptions, RoutingResolvedOptions, CookieResolvedOptions, LoggerOptions,
|
|
2
|
+
export { DEFAULT_ROUTING_OPTIONS, DEFAULT_COOKIE_OPTIONS } from "./constants";
|
|
3
|
+
export type { IntorRawConfig, IntorResolvedConfig, LoaderOptions, RemoteHeaders, TranslatorOptions, RoutingResolvedOptions, CookieResolvedOptions, LoggerOptions, } from "./types";
|
|
@@ -4,4 +4,3 @@ export type { TranslatorOptions } from "./translator";
|
|
|
4
4
|
export type { RoutingResolvedOptions } from "./routing";
|
|
5
5
|
export type { CookieRawOptions, CookieResolvedOptions } from "./cookie";
|
|
6
6
|
export type { LoggerOptions } from "./logger";
|
|
7
|
-
export type { CacheRawOptions, CacheResolvedOptions } from "./cache";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { CacheRawOptions, CacheResolvedOptions } from "./cache";
|
|
2
1
|
import type { CookieRawOptions, CookieResolvedOptions } from "./cookie";
|
|
3
2
|
import type { ClientLoaderOptions, LoaderOptions, ServerLoaderOptions } from "./loader";
|
|
4
3
|
import type { LoggerOptions } from "./logger";
|
|
@@ -35,8 +34,6 @@ export type IntorRawConfig = {
|
|
|
35
34
|
};
|
|
36
35
|
/** Logging and diagnostic configuration. */
|
|
37
36
|
readonly logger?: Omit<LoggerOptions, "id">;
|
|
38
|
-
/** Cache policy used by remote messages loading. */
|
|
39
|
-
readonly cache?: CacheRawOptions;
|
|
40
37
|
};
|
|
41
38
|
/** Fully resolved configuration after validation and normalization. */
|
|
42
39
|
export type IntorResolvedConfig = {
|
|
@@ -56,5 +53,4 @@ export type IntorResolvedConfig = {
|
|
|
56
53
|
loader?: ClientLoaderOptions;
|
|
57
54
|
};
|
|
58
55
|
readonly logger: LoggerOptions;
|
|
59
|
-
readonly cache: CacheResolvedOptions;
|
|
60
56
|
};
|
|
@@ -2,5 +2,5 @@ export { PREFIX_PLACEHOLDER, INTOR_HEADERS } from "./constants";
|
|
|
2
2
|
export { IntorError, IntorErrorCode } from "./error";
|
|
3
3
|
export { deepMerge, type PlainObject, type DeepMergeOverrideEvent, resolveLoaderOptions, normalizePathname, normalizeCacheKey, normalizeLocale, normalizeQuery, } from "./utils";
|
|
4
4
|
export { getLogger, clearLoggerPool } from "./logger";
|
|
5
|
-
export { loadRemoteMessages, type MessagesPool, getGlobalMessagesPool, clearMessagesPool,
|
|
5
|
+
export { loadRemoteMessages, type MessagesPool, getGlobalMessagesPool, clearMessagesPool, mergeMessages, isValidMessages, type MessagesReader, type MessagesReaders, } from "./messages";
|
|
6
6
|
export type { INTOR_GENERATED_KEY, IfGen, GenConfigKeys, GenConfig, GenMessages, GenLocale, BootstrapCore, MessageKey, TranslatorInstance, KeyMode, RoutingLocaleSource, RoutingLocaleCarrier, LocalePathPrefix, } from "./types";
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import type { LocaleMessages } from "intor-translator";
|
|
2
|
-
import Keyv from "keyv";
|
|
3
2
|
/**
|
|
4
|
-
* Global messages pool (
|
|
3
|
+
* Global messages pool (process-level, hot-reload safe).
|
|
4
|
+
*
|
|
5
|
+
* This pool is intentionally minimal:
|
|
6
|
+
* - No TTL
|
|
7
|
+
* - No eviction
|
|
8
|
+
* - No external backends
|
|
9
|
+
*
|
|
10
|
+
* Messages are treated as immutable within a process lifecycle.
|
|
5
11
|
*/
|
|
6
|
-
export type MessagesPool =
|
|
12
|
+
export type MessagesPool = Map<string, LocaleMessages>;
|
|
7
13
|
declare global {
|
|
8
14
|
var __INTOR_MESSAGES_POOL__: MessagesPool | undefined;
|
|
9
15
|
}
|
|
10
|
-
export declare function getGlobalMessagesPool(): MessagesPool;
|
|
11
16
|
/**
|
|
12
|
-
*
|
|
17
|
+
* Get the global messages pool.
|
|
13
18
|
*
|
|
14
|
-
*
|
|
15
|
-
* -
|
|
16
|
-
|
|
17
|
-
export declare function setGlobalMessagesPool(pool: MessagesPool): void;
|
|
18
|
-
/**
|
|
19
|
-
* Optional: clear all cache
|
|
20
|
-
* - Useful in tests or dynamic reloads.
|
|
19
|
+
* Lazily initialized to ensure:
|
|
20
|
+
* - Cross-module sharing
|
|
21
|
+
* - Dev / HMR safety
|
|
21
22
|
*/
|
|
23
|
+
export declare function getGlobalMessagesPool(): MessagesPool;
|
|
24
|
+
/** Clear all cached messages. */
|
|
22
25
|
export declare function clearMessagesPool(): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { loadRemoteMessages } from "./load-remote-messages";
|
|
2
|
-
export { type MessagesPool, getGlobalMessagesPool, clearMessagesPool,
|
|
2
|
+
export { type MessagesPool, getGlobalMessagesPool, clearMessagesPool, } from "./global-messages-pool";
|
|
3
3
|
export { mergeMessages } from "./merge-messages";
|
|
4
4
|
export { isValidMessages } from "./utils/is-valid-messages";
|
|
5
|
-
export type {
|
|
5
|
+
export type { MessagesReader, MessagesReaders } from "./types";
|
|
@@ -7,9 +7,8 @@ import type { LocaleMessages } from "intor-translator";
|
|
|
7
7
|
* It coordinates:
|
|
8
8
|
*
|
|
9
9
|
* - Locale resolution with fallbacks
|
|
10
|
-
* - Cache read / write behavior
|
|
11
10
|
* - Respecting abort signals across the entire async flow
|
|
12
11
|
*
|
|
13
12
|
* Network fetching and data validation are delegated to lower-level utilities.
|
|
14
13
|
*/
|
|
15
|
-
export declare const loadRemoteMessages: ({
|
|
14
|
+
export declare const loadRemoteMessages: ({ locale, fallbackLocales, namespaces, rootDir, url, headers, signal, loggerOptions, }: LoadRemoteMessagesParams) => Promise<LocaleMessages | undefined>;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import type { RemoteHeaders, LoggerOptions
|
|
2
|
-
import type { MessagesPool } from "../../../core";
|
|
1
|
+
import type { RemoteHeaders, LoggerOptions } from "../../../config";
|
|
3
2
|
export interface LoadRemoteMessagesParams {
|
|
4
|
-
id: string;
|
|
5
3
|
locale: string;
|
|
6
4
|
fallbackLocales?: string[];
|
|
7
5
|
namespaces?: string[];
|
|
@@ -9,8 +7,5 @@ export interface LoadRemoteMessagesParams {
|
|
|
9
7
|
url: string;
|
|
10
8
|
headers?: RemoteHeaders;
|
|
11
9
|
signal?: AbortSignal;
|
|
12
|
-
pool?: MessagesPool;
|
|
13
|
-
cacheOptions: CacheResolvedOptions;
|
|
14
|
-
allowCacheWrite?: boolean;
|
|
15
10
|
loggerOptions: LoggerOptions;
|
|
16
11
|
}
|
|
@@ -1,37 +1,13 @@
|
|
|
1
|
-
import type { NestedMessage } from "intor-translator";
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
2
|
+
* A function that reads and parses a message file.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `NestedMessage` object that can contain nested message structures.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```ts
|
|
12
|
-
* const messages: Messages = {
|
|
13
|
-
* ui: {
|
|
14
|
-
* greeting: "Hello",
|
|
15
|
-
* farewell: "Goodbye"
|
|
16
|
-
* },
|
|
17
|
-
* errors: {
|
|
18
|
-
* network: "Network error occurred"
|
|
19
|
-
* }
|
|
20
|
-
* };
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export type Messages = Record<string, NestedMessage>;
|
|
24
|
-
/**
|
|
25
|
-
* A function that reads messages from a given file path.
|
|
26
|
-
*
|
|
27
|
-
* - This function is expected to return a `Promise` that resolves to a `Messages` object
|
|
28
|
-
* representing messages for a single locale.
|
|
29
|
-
* - It can be implemented to support different file formats such as YAML, TOML, or others.
|
|
4
|
+
* This function is format-specific (YAML, TOML, etc.)
|
|
5
|
+
* and is NOT responsible for validating the returned structure.
|
|
30
6
|
*
|
|
31
7
|
* @param filePath - The path to the message file to read.
|
|
32
|
-
* @returns A Promise that resolves to
|
|
8
|
+
* @returns A Promise that resolves to parsed, unvalidated content.
|
|
33
9
|
*
|
|
34
|
-
*
|
|
10
|
+
* @example
|
|
35
11
|
* ```ts
|
|
36
12
|
* const reader: MessagesReader = async (filePath) => {
|
|
37
13
|
* const content = await fs.promises.readFile(filePath, "utf-8");
|
|
@@ -39,13 +15,15 @@ export type Messages = Record<string, NestedMessage>;
|
|
|
39
15
|
* };
|
|
40
16
|
* ```
|
|
41
17
|
*/
|
|
42
|
-
export type MessagesReader = (filePath: string) => Promise<
|
|
18
|
+
export type MessagesReader = (filePath: string) => Promise<unknown>;
|
|
43
19
|
/**
|
|
44
|
-
*
|
|
20
|
+
* A map of file extension (without dot) to message reader.
|
|
45
21
|
*
|
|
46
|
-
*
|
|
22
|
+
* Example:
|
|
23
|
+
* {
|
|
24
|
+
* yaml: yamlReader,
|
|
25
|
+
* yml: yamlReader,
|
|
26
|
+
* toml: tomlReader,
|
|
27
|
+
* }
|
|
47
28
|
*/
|
|
48
|
-
export
|
|
49
|
-
exts?: string[];
|
|
50
|
-
messagesReader?: MessagesReader;
|
|
51
|
-
}
|
|
29
|
+
export type MessagesReaders = Record<string, MessagesReader>;
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MessageObject } from "intor-translator";
|
|
2
2
|
/** Check if a value is a plain object (not null, not array) */
|
|
3
3
|
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
4
4
|
/**
|
|
5
|
-
* Check if a value is a valid
|
|
5
|
+
* Check if a value is a valid MessageObject.
|
|
6
6
|
*
|
|
7
|
-
* -
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```ts
|
|
11
|
-
* isValidMessages({ en: { hello: "Hello" } }) // true
|
|
12
|
-
* isValidMessages({ en: { count: 5 } }) // false
|
|
13
|
-
* ```
|
|
7
|
+
* - Supports all MessageValue variants (primitive, array, object).
|
|
8
|
+
* - Uses an iterative approach to avoid stack overflow.
|
|
14
9
|
*/
|
|
15
|
-
export declare function isValidMessages(value: unknown): value is
|
|
10
|
+
export declare function isValidMessages(value: unknown): value is MessageObject;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Locale, type Replacement, type ScopedLeafKeys, type LocalizedLeafKeys, type LocaleMessages } from "intor-translator";
|
|
1
|
+
import { type Locale, type Replacement, type ScopedLeafKeys, type LocalizedLeafKeys, type LocaleMessages, type MessageValue } from "intor-translator";
|
|
2
2
|
/** Key resolution strategy. */
|
|
3
3
|
export type KeyMode = "auto" | "strict" | "string";
|
|
4
4
|
/** Only allows keys resolved from message definitions. */
|
|
@@ -24,5 +24,7 @@ export type TranslatorInstance<M extends LocaleMessages, PK extends string | und
|
|
|
24
24
|
hasKey: (key?: MessageKey<M, PK, Mode>, targetLocale?: Locale<M>) => boolean;
|
|
25
25
|
/** Translate a given key into its string representation. */
|
|
26
26
|
t: (key?: MessageKey<M, PK, Mode>, replacements?: Replacement) => string;
|
|
27
|
+
/** Translate a given key and return its raw message value. */
|
|
28
|
+
tRaw: (key?: MessageKey<M, PK, Mode>, replacements?: Replacement) => MessageValue | undefined;
|
|
27
29
|
};
|
|
28
30
|
export {};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { LocaleContext, ResolvedLocale } from "./types";
|
|
2
2
|
import type { IntorResolvedConfig } from "../../../config";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Resolve the active locale from inbound routing configuration.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Iterates through configured locale sources and returns the first
|
|
7
|
+
* normalized, supported locale. Falls back to the detected locale
|
|
8
|
+
* or the default locale if none match.
|
|
8
9
|
*/
|
|
9
10
|
export declare function resolveLocale(config: IntorResolvedConfig, context: LocaleContext): ResolvedLocale;
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import type { IntorResolvedConfig } from "../../config";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Get locale candidate from the `Accept-Language` header.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - Normalizes the matched locale against `supportedLocales`.
|
|
8
|
-
*
|
|
9
|
-
* If no supported locale can be resolved, `undefined` is returned.
|
|
5
|
+
* Parses language priorities and returns the highest-priority
|
|
6
|
+
* language present in `supportedLocales`, without normalization.
|
|
10
7
|
*
|
|
11
8
|
* @example
|
|
12
9
|
* ```ts
|
|
13
10
|
* getLocaleFromAcceptLanguage("en-US,en;q=0.8,zh-TW;q=0.9", ["en-US", "zh-TW"])
|
|
14
11
|
* // => "en-US"
|
|
12
|
+
*
|
|
15
13
|
* getLocaleFromAcceptLanguage("fr,ja;q=0.9", ["en", "zh-TW"])
|
|
16
14
|
* // => undefined
|
|
17
15
|
* ```
|
|
18
16
|
*/
|
|
19
|
-
export declare const getLocaleFromAcceptLanguage: (
|
|
17
|
+
export declare const getLocaleFromAcceptLanguage: (acceptLanguageHeader: string | undefined | null, supportedLocales: IntorResolvedConfig["supportedLocales"]) => string | undefined;
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../config";
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
2
|
+
* Get locale candidate from hostname.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
4
|
+
* Returns the left-most hostname label, without validation or normalization.
|
|
6
5
|
*
|
|
7
6
|
* @example
|
|
8
7
|
* ```ts
|
|
9
|
-
* getLocaleFromHost(
|
|
8
|
+
* getLocaleFromHost("en.example.com")
|
|
10
9
|
* // => "en"
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
*
|
|
11
|
+
* getLocaleFromHost("example.com")
|
|
12
|
+
* // => "example"
|
|
13
|
+
*
|
|
14
|
+
* getLocaleFromHost("api.jp.example.com")
|
|
15
|
+
* // => "api"
|
|
16
|
+
*
|
|
17
|
+
* getLocaleFromHost("localhost")
|
|
14
18
|
* // => undefined
|
|
15
19
|
* ```
|
|
16
20
|
*/
|
|
17
|
-
export declare function getLocaleFromHost(
|
|
21
|
+
export declare function getLocaleFromHost(host: string | undefined): string | undefined;
|
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
import type { IntorResolvedConfig } from "../../config";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Get locale from pathname.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - Inspects the first path segment to determine whether
|
|
8
|
-
* it matches a supported locale.
|
|
9
|
-
*
|
|
10
|
-
* If no locale segment is found, `undefined` is returned.
|
|
11
|
-
*
|
|
12
|
-
* Note:
|
|
13
|
-
* - The pathname is treated as a canonical source.
|
|
14
|
-
* - Only exact matches against `supportedLocales` are accepted.
|
|
15
|
-
* - ___Locale normalization is intentionally not applied here.___
|
|
5
|
+
* Extracts the first pathname segment (after basePath) as a locale
|
|
6
|
+
* if it exactly matches one of the supported locales.
|
|
16
7
|
*
|
|
17
8
|
* @example
|
|
18
9
|
* ```ts
|
|
@@ -28,4 +19,4 @@ import type { IntorResolvedConfig } from "../../config";
|
|
|
28
19
|
* // => "en"
|
|
29
20
|
* ```
|
|
30
21
|
*/
|
|
31
|
-
export declare function getLocaleFromPathname(
|
|
22
|
+
export declare function getLocaleFromPathname(pathname: string, config: IntorResolvedConfig): string | undefined;
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../config";
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
2
|
+
* Get locale candidate from URL query parameters.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* If no valid locale is found, `undefined` is returned.
|
|
4
|
+
* Extracts the value of the configured query key, without
|
|
5
|
+
* validation or normalization.
|
|
9
6
|
*
|
|
10
7
|
* @example
|
|
11
8
|
* ```ts
|
|
12
|
-
* getLocaleFromQuery(
|
|
9
|
+
* getLocaleFromQuery({ locale: "en" }, "locale")
|
|
13
10
|
* // => "en"
|
|
14
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* getLocaleFromQuery({}, "locale")
|
|
15
13
|
* // => undefined
|
|
16
|
-
*
|
|
14
|
+
*
|
|
15
|
+
* getLocaleFromQuery({ locale: ["zh-TW"] }, "locale")
|
|
17
16
|
* // => "zh-TW"
|
|
18
17
|
* ```
|
|
19
18
|
*/
|
|
20
|
-
export declare function getLocaleFromQuery(
|
|
19
|
+
export declare function getLocaleFromQuery(query: Record<string, string | string[] | undefined> | undefined, queryKey: string): string | undefined;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import type { TranslatorInstanceServer } from "../translator/translator-instance";
|
|
2
2
|
import type { IntorResolvedConfig } from "../../config";
|
|
3
|
-
import type { GenConfigKeys, GenMessages } from "../../core";
|
|
4
|
-
import type { MessagesReadOptions } from "../../core";
|
|
3
|
+
import type { GenConfigKeys, GenMessages, MessagesReaders } from "../../core";
|
|
5
4
|
import type { LocalizedNodeKeys, TranslateHandlers, TranslateHook, TranslatorPlugin } from "intor-translator";
|
|
6
5
|
export interface GetTranslatorParams {
|
|
7
6
|
locale: string;
|
|
8
7
|
handlers?: TranslateHandlers;
|
|
9
8
|
plugins?: (TranslatorPlugin | TranslateHook)[];
|
|
10
|
-
|
|
9
|
+
readers?: MessagesReaders;
|
|
11
10
|
allowCacheWrite?: boolean;
|
|
12
11
|
}
|
|
13
12
|
/**
|
|
@@ -7,12 +7,12 @@ import type { LocaleMessages } from "intor-translator";
|
|
|
7
7
|
* It coordinates:
|
|
8
8
|
*
|
|
9
9
|
* - Locale resolution with fallbacks
|
|
10
|
-
* - Process-level memoization (read by default, write by ownership)
|
|
11
10
|
* - Concurrency control for file system access
|
|
11
|
+
* - Process-level memoization (read by default, write by ownership)
|
|
12
12
|
*
|
|
13
13
|
* Local messages are cached for the lifetime of the process.
|
|
14
14
|
* Cache writes are restricted to the primary initialization flow.
|
|
15
15
|
*
|
|
16
16
|
* File traversal, parsing, and validation are delegated to lower-level utilities.
|
|
17
17
|
*/
|
|
18
|
-
export declare const loadLocalMessages: ({ id, locale, fallbackLocales, namespaces, rootDir, concurrency,
|
|
18
|
+
export declare const loadLocalMessages: ({ id, locale, fallbackLocales, namespaces, rootDir, concurrency, readers, pool, allowCacheWrite, loggerOptions, }: LoadLocalMessagesParams) => Promise<LocaleMessages | undefined>;
|