intor 2.2.13 → 2.2.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/exports/config/index.d.ts +2 -0
- package/dist/exports/config/index.js +4 -0
- package/dist/exports/index.d.ts +5 -0
- package/dist/exports/index.js +11 -0
- package/dist/exports/next/index.d.ts +3 -0
- package/dist/exports/next/index.js +9 -0
- package/dist/exports/next/middleware/index.d.ts +2 -0
- package/dist/exports/next/middleware/index.js +2 -0
- package/dist/exports/next/server/index.d.ts +2 -0
- package/dist/exports/next/server/index.js +2 -0
- package/dist/exports/react/index.d.ts +2 -0
- package/dist/exports/react/index.js +6 -0
- package/dist/exports/server/index.d.ts +2 -0
- package/dist/exports/server/index.js +7 -0
- package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-all.d.ts +12 -0
- package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-all.js +60 -0
- package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-except-default.d.ts +16 -0
- package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-except-default.js +81 -0
- package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-none.d.ts +10 -0
- package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-none.js +22 -0
- package/dist/src/adapters/next/middleware/index.d.ts +2 -0
- package/dist/src/adapters/next/middleware/intor-middleware.d.ts +6 -0
- package/dist/src/adapters/next/middleware/intor-middleware.js +22 -0
- package/dist/src/adapters/next/middleware/utils/create-response.d.ts +17 -0
- package/dist/src/adapters/next/middleware/utils/create-response.js +42 -0
- package/dist/src/adapters/next/middleware/utils/determine-initial-locale.d.ts +8 -0
- package/dist/src/adapters/next/middleware/utils/determine-initial-locale.js +28 -0
- package/dist/src/adapters/next/middleware/utils/set-locale-cookie-edge.d.ts +15 -0
- package/dist/src/adapters/next/middleware/utils/set-locale-cookie-edge.js +24 -0
- package/dist/src/adapters/next/middleware/utils/set-pathname-header.d.ts +12 -0
- package/dist/src/adapters/next/middleware/utils/set-pathname-header.js +13 -0
- package/dist/src/adapters/next/navigation/index.d.ts +4 -0
- package/dist/src/adapters/next/navigation/link.d.ts +16 -0
- package/dist/src/adapters/next/navigation/link.js +25 -0
- package/dist/src/adapters/next/navigation/redirect.d.ts +16 -0
- package/dist/src/adapters/next/navigation/redirect.js +36 -0
- package/dist/src/adapters/next/navigation/use-pathname.d.ts +17 -0
- package/dist/src/adapters/next/navigation/use-pathname.js +49 -0
- package/dist/src/adapters/next/navigation/use-router.d.ts +20 -0
- package/dist/src/adapters/next/navigation/use-router.js +31 -0
- package/dist/src/adapters/next/navigation/utils/should-full-reload.d.ts +7 -0
- package/dist/src/adapters/next/navigation/utils/should-full-reload.js +19 -0
- package/dist/src/adapters/next/navigation/utils/use-locale-switch.d.ts +16 -0
- package/dist/src/adapters/next/navigation/utils/use-locale-switch.js +58 -0
- package/dist/src/adapters/next/server/get-i18n-context.d.ts +9 -0
- package/dist/src/adapters/next/server/get-i18n-context.js +47 -0
- package/dist/src/adapters/next/server/get-translator.d.ts +30 -0
- package/dist/src/adapters/next/server/get-translator.js +19 -0
- package/dist/src/adapters/next/server/index.d.ts +2 -0
- package/dist/src/adapters/next/shared/constants/pathname-header-name.d.ts +1 -0
- package/dist/src/adapters/next/shared/constants/pathname-header-name.js +4 -0
- package/dist/src/adapters/next/shared/utils/locale-prefix-pathname.d.ts +16 -0
- package/dist/src/adapters/next/shared/utils/locale-prefix-pathname.js +33 -0
- package/dist/src/adapters/next/shared/utils/localize-pathname.d.ts +18 -0
- package/dist/src/adapters/next/shared/utils/localize-pathname.js +36 -0
- package/dist/src/client/react/contexts/config/context.d.ts +3 -0
- package/dist/src/client/react/contexts/config/context.js +6 -0
- package/dist/src/client/react/contexts/config/hook.d.ts +2 -0
- package/dist/src/client/react/contexts/config/hook.js +12 -0
- package/dist/src/client/react/contexts/config/index.d.ts +2 -0
- package/dist/src/client/react/contexts/config/provider.d.ts +2 -0
- package/dist/src/client/react/contexts/config/provider.js +11 -0
- package/dist/src/client/react/contexts/config/types.d.ts +10 -0
- package/dist/src/client/react/contexts/intor-provider/index.d.ts +2 -0
- package/dist/src/client/react/contexts/intor-provider/intor-provider.d.ts +2 -0
- package/dist/src/client/react/contexts/intor-provider/intor-provider.js +17 -0
- package/dist/src/client/react/contexts/intor-provider/types.d.ts +14 -0
- package/dist/src/client/react/contexts/locale/context.d.ts +3 -0
- package/dist/src/client/react/contexts/locale/context.js +6 -0
- package/dist/src/client/react/contexts/locale/hook.d.ts +1 -0
- package/dist/src/client/react/contexts/locale/hook.js +12 -0
- package/dist/src/client/react/contexts/locale/index.d.ts +2 -0
- package/dist/src/client/react/contexts/locale/provider.d.ts +3 -0
- package/dist/src/client/react/contexts/locale/provider.js +48 -0
- package/dist/src/client/react/contexts/locale/types.d.ts +13 -0
- package/dist/src/client/react/contexts/locale/utils/change-locale.d.ts +22 -0
- package/dist/src/client/react/contexts/locale/utils/change-locale.js +35 -0
- package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.d.ts +8 -0
- package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.js +28 -0
- package/dist/src/client/react/contexts/messages/context.d.ts +3 -0
- package/dist/src/client/react/contexts/messages/context.js +6 -0
- package/dist/src/client/react/contexts/messages/hook.d.ts +2 -0
- package/dist/src/client/react/contexts/messages/hook.js +12 -0
- package/dist/src/client/react/contexts/messages/index.d.ts +2 -0
- package/dist/src/client/react/contexts/messages/provider.d.ts +3 -0
- package/dist/src/client/react/contexts/messages/provider.js +32 -0
- package/dist/src/client/react/contexts/messages/types.d.ts +15 -0
- package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.d.ts +16 -0
- package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.js +57 -0
- package/dist/src/client/react/contexts/translate-handlers/context.d.ts +2 -0
- package/dist/src/client/react/contexts/translate-handlers/context.js +6 -0
- package/dist/src/client/react/contexts/translate-handlers/hook.d.ts +2 -0
- package/dist/src/client/react/contexts/translate-handlers/hook.js +10 -0
- package/dist/src/client/react/contexts/translate-handlers/index.d.ts +3 -0
- package/dist/src/client/react/contexts/translate-handlers/provider.d.ts +2 -0
- package/dist/src/client/react/contexts/translate-handlers/provider.js +11 -0
- package/dist/src/client/react/contexts/translate-handlers/types.d.ts +7 -0
- package/dist/src/client/react/contexts/translator/context.d.ts +3 -0
- package/dist/src/client/react/contexts/translator/context.js +6 -0
- package/dist/src/client/react/contexts/translator/hook.d.ts +2 -0
- package/dist/src/client/react/contexts/translator/hook.js +12 -0
- package/dist/src/client/react/contexts/translator/index.d.ts +2 -0
- package/dist/src/client/react/contexts/translator/provider.d.ts +2 -0
- package/dist/src/client/react/contexts/translator/provider.js +53 -0
- package/dist/src/client/react/contexts/translator/types.d.ts +11 -0
- package/dist/src/client/react/hooks/use-translator.d.ts +12 -0
- package/dist/src/client/react/hooks/use-translator.js +38 -0
- package/dist/src/client/react/index.d.ts +4 -0
- package/dist/src/client/shared/utils/get-initial-locale.d.ts +11 -0
- package/dist/src/client/shared/utils/get-initial-locale.js +21 -0
- package/dist/src/config/constants/cache.constants.d.ts +2 -0
- package/dist/src/config/constants/cache.constants.js +7 -0
- package/dist/src/config/constants/cookie.constants.d.ts +2 -0
- package/dist/src/config/constants/cookie.constants.js +14 -0
- package/dist/src/config/constants/routing.constants.d.ts +2 -0
- package/dist/src/config/constants/routing.constants.js +11 -0
- package/dist/src/config/define-intor-config.d.ts +2 -0
- package/dist/src/config/define-intor-config.js +34 -0
- package/dist/src/config/index.d.ts +5 -0
- package/dist/src/config/resolvers/resolve-cache-options.d.ts +2 -0
- package/dist/src/config/resolvers/resolve-cache-options.js +10 -0
- package/dist/src/config/resolvers/resolve-cookie-options.d.ts +11 -0
- package/dist/src/config/resolvers/resolve-cookie-options.js +19 -0
- package/dist/src/config/resolvers/resolve-fallback-locales.d.ts +3 -0
- package/dist/src/config/resolvers/resolve-fallback-locales.js +33 -0
- package/dist/src/config/resolvers/resolve-routing-options.d.ts +13 -0
- package/dist/src/config/resolvers/resolve-routing-options.js +28 -0
- package/dist/src/config/types/cache.types.d.ts +7 -0
- package/dist/src/config/types/cookie.types.d.ts +23 -0
- package/dist/src/config/types/intor-config.types.d.ts +41 -0
- package/dist/src/config/types/loader.types.d.ts +38 -0
- package/dist/src/config/types/logger.types.d.ts +7 -0
- package/dist/src/config/types/routing.types.d.ts +15 -0
- package/dist/src/config/types/translator.types.d.ts +4 -0
- package/dist/src/config/validators/validate-default-locale.d.ts +3 -0
- package/dist/src/config/validators/validate-default-locale.js +24 -0
- package/dist/src/config/validators/validate-supported-locales.d.ts +7 -0
- package/dist/src/config/validators/validate-supported-locales.js +22 -0
- package/dist/src/server/index.d.ts +4 -0
- package/dist/src/server/intor/index.d.ts +2 -0
- package/dist/src/server/intor/intor.d.ts +14 -0
- package/dist/src/server/intor/intor.js +67 -0
- package/dist/src/server/intor/types.d.ts +14 -0
- package/dist/src/server/messages/index.d.ts +7 -0
- package/dist/src/server/messages/load-local-messages/index.d.ts +2 -0
- package/dist/src/server/messages/load-local-messages/load-local-messages.d.ts +11 -0
- package/dist/src/server/messages/load-local-messages/load-local-messages.js +85 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.d.ts +29 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +95 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/index.d.ts +1 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/types.d.ts +15 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/index.d.ts +2 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/index.d.ts +1 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.d.ts +34 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +85 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/types.d.ts +18 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.d.ts +6 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.js +12 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.d.ts +14 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.js +21 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.d.ts +10 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +31 -0
- package/dist/src/server/messages/load-local-messages/read-locale-messages/types.d.ts +23 -0
- package/dist/src/server/messages/load-local-messages/types.d.ts +21 -0
- package/dist/src/server/messages/load-messages.d.ts +11 -0
- package/dist/src/server/messages/load-messages.js +77 -0
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.d.ts +9 -0
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +50 -0
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/index.d.ts +1 -0
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/types.d.ts +13 -0
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.d.ts +5 -0
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +25 -0
- package/dist/src/server/messages/load-remote-messages/index.d.ts +2 -0
- package/dist/src/server/messages/load-remote-messages/load-remote-messages.d.ts +9 -0
- package/dist/src/server/messages/load-remote-messages/load-remote-messages.js +79 -0
- package/dist/src/server/messages/load-remote-messages/types.d.ts +20 -0
- package/dist/src/server/messages/shared/global-messages-pool.d.ts +15 -0
- package/dist/src/server/messages/shared/global-messages-pool.js +10 -0
- package/dist/src/server/messages/shared/types.d.ts +39 -0
- package/dist/src/server/messages/shared/utils/is-valid-messages.d.ts +15 -0
- package/dist/src/server/messages/shared/utils/is-valid-messages.js +36 -0
- package/dist/src/server/messages/types.d.ts +15 -0
- package/dist/src/server/shared/logger/get-logger.d.ts +11 -0
- package/dist/src/server/shared/logger/get-logger.js +34 -0
- package/dist/src/server/shared/logger/global-logger-pool.d.ts +15 -0
- package/dist/src/server/shared/logger/global-logger-pool.js +8 -0
- package/dist/src/server/translator/get-translator.d.ts +33 -0
- package/dist/src/server/translator/get-translator.js +39 -0
- package/dist/src/server/translator/index.d.ts +1 -0
- package/dist/src/shared/constants/prefix-placeholder.d.ts +1 -0
- package/dist/src/shared/constants/prefix-placeholder.js +4 -0
- package/dist/src/shared/error/index.d.ts +1 -0
- package/dist/src/shared/error/intor-error.d.ts +16 -0
- package/dist/src/shared/error/intor-error.js +21 -0
- package/dist/src/shared/types/generated.types.d.ts +30 -0
- package/dist/src/shared/types/translator-instance.types.d.ts +33 -0
- package/dist/src/shared/utils/client/build-cookie-string.d.ts +9 -0
- package/dist/src/shared/utils/client/build-cookie-string.js +33 -0
- package/dist/src/shared/utils/client/set-locale-cookie-browser.d.ts +13 -0
- package/dist/src/shared/utils/client/set-locale-cookie-browser.js +21 -0
- package/dist/src/shared/utils/index.d.ts +8 -0
- package/dist/src/shared/utils/locale/normalize-locale.d.ts +4 -0
- package/dist/src/shared/utils/locale/normalize-locale.js +42 -0
- package/dist/src/shared/utils/locale/resolve-preferred-locale.d.ts +5 -0
- package/dist/src/shared/utils/locale/resolve-preferred-locale.js +26 -0
- package/dist/src/shared/utils/merge-messages.d.ts +6 -0
- package/dist/src/shared/utils/merge-messages.js +13 -0
- package/dist/src/shared/utils/normalize-cache-key.d.ts +3 -0
- package/dist/src/shared/utils/normalize-cache-key.js +29 -0
- package/dist/src/shared/utils/pathname/extract-pathname.d.ts +28 -0
- package/dist/src/shared/utils/pathname/extract-pathname.js +58 -0
- package/dist/src/shared/utils/pathname/normalize-pathname.d.ts +12 -0
- package/dist/src/shared/utils/pathname/normalize-pathname.js +43 -0
- package/dist/src/shared/utils/pathname/standardize-pathname.d.ts +18 -0
- package/dist/src/shared/utils/pathname/standardize-pathname.js +30 -0
- package/dist/src/shared/utils/resolve-namespaces.d.ts +10 -0
- package/dist/src/shared/utils/resolve-namespaces.js +33 -0
- package/package.json +28 -30
- package/dist/config/index.cjs +0 -198
- package/dist/config/index.d.cts +0 -145
- package/dist/config/index.d.ts +0 -145
- package/dist/config/index.js +0 -193
- package/dist/index.cjs +0 -234
- package/dist/index.d.cts +0 -224
- package/dist/index.d.ts +0 -224
- package/dist/index.js +0 -214
- package/dist/next/index.cjs +0 -940
- package/dist/next/index.d.cts +0 -282
- package/dist/next/index.d.ts +0 -282
- package/dist/next/index.js +0 -907
- package/dist/next/middleware/index.cjs +0 -387
- package/dist/next/middleware/index.d.cts +0 -128
- package/dist/next/middleware/index.d.ts +0 -128
- package/dist/next/middleware/index.js +0 -384
- package/dist/next/server/index.cjs +0 -734
- package/dist/next/server/index.d.cts +0 -277
- package/dist/next/server/index.d.ts +0 -277
- package/dist/next/server/index.js +0 -723
- package/dist/react/index.cjs +0 -649
- package/dist/react/index.d.cts +0 -224
- package/dist/react/index.d.ts +0 -224
- package/dist/react/index.js +0 -620
- package/dist/server/index.cjs +0 -696
- package/dist/server/index.d.cts +0 -377
- package/dist/server/index.d.ts +0 -377
- package/dist/server/index.js +0 -680
package/dist/server/index.cjs
DELETED
|
@@ -1,696 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var path = require('path');
|
|
4
|
-
var perf_hooks = require('perf_hooks');
|
|
5
|
-
var pLimit = require('p-limit');
|
|
6
|
-
var fs = require('fs/promises');
|
|
7
|
-
var logry = require('logry');
|
|
8
|
-
var merge = require('lodash.merge');
|
|
9
|
-
var Keyv = require('keyv');
|
|
10
|
-
var intorTranslator = require('intor-translator');
|
|
11
|
-
|
|
12
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
-
|
|
14
|
-
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
15
|
-
var pLimit__default = /*#__PURE__*/_interopDefault(pLimit);
|
|
16
|
-
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
17
|
-
var merge__default = /*#__PURE__*/_interopDefault(merge);
|
|
18
|
-
var Keyv__default = /*#__PURE__*/_interopDefault(Keyv);
|
|
19
|
-
|
|
20
|
-
// src/server/messages/load-local-messages/load-local-messages.ts
|
|
21
|
-
|
|
22
|
-
// src/config/constants/cache.constants.ts
|
|
23
|
-
var DEFAULT_CACHE_OPTIONS = {
|
|
24
|
-
enabled: process.env.NODE_ENV === "production",
|
|
25
|
-
ttl: 60 * 60 * 1e3
|
|
26
|
-
// 1 hour
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
// src/server/shared/logger/global-logger-pool.ts
|
|
30
|
-
function getGlobalLoggerPool() {
|
|
31
|
-
if (!globalThis.__INTOR_LOGGER_POOL__) {
|
|
32
|
-
globalThis.__INTOR_LOGGER_POOL__ = /* @__PURE__ */ new Map();
|
|
33
|
-
}
|
|
34
|
-
return globalThis.__INTOR_LOGGER_POOL__;
|
|
35
|
-
}
|
|
36
|
-
function clearLoggerPool() {
|
|
37
|
-
const pool = getGlobalLoggerPool();
|
|
38
|
-
pool.clear();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// src/server/shared/logger/get-logger.ts
|
|
42
|
-
var DEFAULT_FORMATTER_CONFIG = {
|
|
43
|
-
node: { meta: { compact: true }, lineBreaksAfter: 1 }
|
|
44
|
-
};
|
|
45
|
-
function getLogger({
|
|
46
|
-
id = "default",
|
|
47
|
-
formatterConfig,
|
|
48
|
-
preset,
|
|
49
|
-
...options
|
|
50
|
-
}) {
|
|
51
|
-
const pool = getGlobalLoggerPool();
|
|
52
|
-
let logger = pool.get(id);
|
|
53
|
-
const useDefault = !formatterConfig && !preset;
|
|
54
|
-
if (!logger) {
|
|
55
|
-
logger = logry.logry({
|
|
56
|
-
id,
|
|
57
|
-
formatterConfig: useDefault ? DEFAULT_FORMATTER_CONFIG : formatterConfig,
|
|
58
|
-
preset,
|
|
59
|
-
...options
|
|
60
|
-
});
|
|
61
|
-
pool.set(id, logger);
|
|
62
|
-
if (pool.size > 1e3) {
|
|
63
|
-
const keys = [...pool.keys()];
|
|
64
|
-
for (const key of keys.slice(0, 200)) pool.delete(key);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return logger;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.ts
|
|
71
|
-
async function collectFileEntries({
|
|
72
|
-
readdir = fs__default.default.readdir,
|
|
73
|
-
limit,
|
|
74
|
-
rootDir,
|
|
75
|
-
namespaces,
|
|
76
|
-
extraOptions: { exts = [".json"], loggerOptions } = {}
|
|
77
|
-
}) {
|
|
78
|
-
const baseLogger = getLogger({ ...loggerOptions });
|
|
79
|
-
const logger = baseLogger.child({ scope: "collect-file-entries" });
|
|
80
|
-
const results = [];
|
|
81
|
-
const walk = async (currentDir) => {
|
|
82
|
-
let entries = [];
|
|
83
|
-
try {
|
|
84
|
-
entries = await readdir(currentDir, { withFileTypes: true });
|
|
85
|
-
} catch (error) {
|
|
86
|
-
logger.error(`Error reading directory: ${currentDir}`, { error });
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const tasks = entries.map(
|
|
90
|
-
(entry) => limit(async () => {
|
|
91
|
-
const fullPath = path__default.default.join(currentDir, entry.name);
|
|
92
|
-
if (entry.isDirectory()) {
|
|
93
|
-
await walk(fullPath);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
if (!exts.some((ext2) => entry.name.endsWith(ext2))) return;
|
|
97
|
-
const relativePath = path__default.default.relative(rootDir, fullPath);
|
|
98
|
-
const ext = path__default.default.extname(relativePath);
|
|
99
|
-
const withoutExt = relativePath.slice(0, -ext.length);
|
|
100
|
-
const segments = withoutExt.split(path__default.default.sep).filter(Boolean);
|
|
101
|
-
const namespace = segments.at(0);
|
|
102
|
-
if (!namespace) return;
|
|
103
|
-
if (namespaces && namespace !== "index") {
|
|
104
|
-
if (!namespaces.includes(namespace)) return;
|
|
105
|
-
}
|
|
106
|
-
results.push({
|
|
107
|
-
namespace,
|
|
108
|
-
fullPath,
|
|
109
|
-
relativePath,
|
|
110
|
-
segments,
|
|
111
|
-
basename: path__default.default.basename(entry.name, ext)
|
|
112
|
-
});
|
|
113
|
-
})
|
|
114
|
-
);
|
|
115
|
-
await Promise.all(tasks);
|
|
116
|
-
};
|
|
117
|
-
await walk(rootDir);
|
|
118
|
-
if (logger.core.level === "debug") {
|
|
119
|
-
logger.debug("Local message files collected.", {
|
|
120
|
-
count: results.length
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
logger.trace("Local message files collected.", {
|
|
124
|
-
count: results.length,
|
|
125
|
-
fileEntries: results.map(({ namespace, relativePath }) => ({
|
|
126
|
-
namespace: namespace === "index" ? null : namespace,
|
|
127
|
-
relativePath
|
|
128
|
-
}))
|
|
129
|
-
});
|
|
130
|
-
return results;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// src/server/messages/shared/utils/is-valid-messages.ts
|
|
134
|
-
function isPlainObject(value) {
|
|
135
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
136
|
-
}
|
|
137
|
-
function isValidMessages(value) {
|
|
138
|
-
if (!isPlainObject(value)) return false;
|
|
139
|
-
const stack = [value];
|
|
140
|
-
while (stack.length > 0) {
|
|
141
|
-
const current = stack.pop();
|
|
142
|
-
for (const v of Object.values(current)) {
|
|
143
|
-
if (typeof v === "string") continue;
|
|
144
|
-
if (isPlainObject(v)) {
|
|
145
|
-
stack.push(v);
|
|
146
|
-
} else {
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return true;
|
|
152
|
-
}
|
|
153
|
-
async function jsonReader(filePath, readFile = fs__default.default.readFile) {
|
|
154
|
-
const raw = await readFile(filePath, "utf8");
|
|
155
|
-
const parsed = JSON.parse(raw);
|
|
156
|
-
return parsed;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.ts
|
|
160
|
-
function nestObjectFromPath(path5, value) {
|
|
161
|
-
let obj = value;
|
|
162
|
-
for (let i = path5.length - 1; i >= 0; i--) {
|
|
163
|
-
obj = { [path5[i]]: obj };
|
|
164
|
-
}
|
|
165
|
-
return obj;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.ts
|
|
169
|
-
async function parseFileEntries({
|
|
170
|
-
fileEntries,
|
|
171
|
-
limit,
|
|
172
|
-
extraOptions: { messagesReader, loggerOptions } = {}
|
|
173
|
-
}) {
|
|
174
|
-
const baseLogger = getLogger({ ...loggerOptions });
|
|
175
|
-
const logger = baseLogger.child({ scope: "parse-file-entries" });
|
|
176
|
-
const parsedFileEntries = [];
|
|
177
|
-
const tasks = fileEntries.map(
|
|
178
|
-
({ namespace, segments, basename, fullPath }) => limit(async () => {
|
|
179
|
-
try {
|
|
180
|
-
const segsWithoutNs = segments.slice(1);
|
|
181
|
-
const ext = path__default.default.extname(fullPath);
|
|
182
|
-
const json = ext !== ".json" && messagesReader ? await messagesReader(fullPath) : await jsonReader(fullPath);
|
|
183
|
-
if (!isValidMessages(json)) {
|
|
184
|
-
throw new Error(
|
|
185
|
-
"JSON file does not match NamespaceMessages structure"
|
|
186
|
-
);
|
|
187
|
-
}
|
|
188
|
-
const isIndex = basename === "index";
|
|
189
|
-
const keyPath = isIndex ? segsWithoutNs.slice(0, -1) : segsWithoutNs;
|
|
190
|
-
const nested = nestObjectFromPath(keyPath, json);
|
|
191
|
-
parsedFileEntries.push({ namespace, messages: nested });
|
|
192
|
-
logger.trace("Parsed file.", { path: fullPath });
|
|
193
|
-
} catch (error) {
|
|
194
|
-
logger.error("Failed to read or parse file.", {
|
|
195
|
-
path: fullPath,
|
|
196
|
-
error
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
})
|
|
200
|
-
);
|
|
201
|
-
await Promise.all(tasks);
|
|
202
|
-
const result = {};
|
|
203
|
-
for (const { namespace, messages } of parsedFileEntries) {
|
|
204
|
-
if (namespace === "index") {
|
|
205
|
-
merge__default.default(result, messages);
|
|
206
|
-
} else {
|
|
207
|
-
result[namespace] = merge__default.default(
|
|
208
|
-
result[namespace] ?? {},
|
|
209
|
-
messages
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
return result;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.ts
|
|
217
|
-
var readLocaleMessages = async ({
|
|
218
|
-
limit,
|
|
219
|
-
rootDir = "messages",
|
|
220
|
-
locale,
|
|
221
|
-
namespaces,
|
|
222
|
-
extraOptions: { exts, messagesReader, loggerOptions } = {}
|
|
223
|
-
}) => {
|
|
224
|
-
const fileEntries = await collectFileEntries({
|
|
225
|
-
rootDir: path__default.default.resolve(process.cwd(), rootDir, locale),
|
|
226
|
-
namespaces,
|
|
227
|
-
limit,
|
|
228
|
-
extraOptions: { exts, loggerOptions }
|
|
229
|
-
});
|
|
230
|
-
const namespaceMessages = await parseFileEntries({
|
|
231
|
-
fileEntries,
|
|
232
|
-
limit,
|
|
233
|
-
extraOptions: { messagesReader, loggerOptions }
|
|
234
|
-
});
|
|
235
|
-
const localeMessages = { [locale]: namespaceMessages };
|
|
236
|
-
return localeMessages;
|
|
237
|
-
};
|
|
238
|
-
function getGlobalMessagesPool() {
|
|
239
|
-
if (!globalThis.__INTOR_MESSAGES_POOL__) {
|
|
240
|
-
globalThis.__INTOR_MESSAGES_POOL__ = new Keyv__default.default();
|
|
241
|
-
}
|
|
242
|
-
return globalThis.__INTOR_MESSAGES_POOL__;
|
|
243
|
-
}
|
|
244
|
-
function clearMessagesPool() {
|
|
245
|
-
const pool = getGlobalMessagesPool();
|
|
246
|
-
pool.clear();
|
|
247
|
-
}
|
|
248
|
-
var mergeMessages = (staticMessages = {}, loadedMessages = {}) => {
|
|
249
|
-
if (!loadedMessages) return { ...staticMessages };
|
|
250
|
-
return merge__default.default({}, staticMessages, loadedMessages);
|
|
251
|
-
};
|
|
252
|
-
|
|
253
|
-
// src/shared/utils/normalize-cache-key.ts
|
|
254
|
-
var CACHE_KEY_DELIMITER = "|";
|
|
255
|
-
var sanitize = (k) => k.replaceAll(/[\u200B-\u200D\uFEFF]/g, "").replaceAll(/[\r\n]/g, "").trim();
|
|
256
|
-
var normalizeCacheKey = (key, delimiter = CACHE_KEY_DELIMITER) => {
|
|
257
|
-
if (key === null || key === void 0) return null;
|
|
258
|
-
if (Array.isArray(key)) {
|
|
259
|
-
if (key.length === 0) return null;
|
|
260
|
-
const normalized = key.map((k) => {
|
|
261
|
-
if (k === null) return "__null";
|
|
262
|
-
if (k === void 0) return "__undefined";
|
|
263
|
-
if (typeof k === "boolean") return k ? "__true" : "__false";
|
|
264
|
-
return sanitize(String(k));
|
|
265
|
-
});
|
|
266
|
-
return normalized.join(delimiter);
|
|
267
|
-
}
|
|
268
|
-
if (typeof key === "boolean") return key ? "__true" : "__false";
|
|
269
|
-
return String(key);
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
// src/shared/constants/prefix-placeholder.ts
|
|
273
|
-
var PREFIX_PLACEHOLDER = "{locale}";
|
|
274
|
-
|
|
275
|
-
// src/shared/utils/resolve-namespaces.ts
|
|
276
|
-
var resolveNamespaces = ({
|
|
277
|
-
config,
|
|
278
|
-
pathname
|
|
279
|
-
}) => {
|
|
280
|
-
const { loader } = config;
|
|
281
|
-
const { routeNamespaces = {}, namespaces } = loader || {};
|
|
282
|
-
if (Object.keys(routeNamespaces).length === 0 && !namespaces)
|
|
283
|
-
return void 0;
|
|
284
|
-
const standardizedPathname = standardizePathname({ config, pathname });
|
|
285
|
-
const placeholderRemovedPathname = standardizedPathname.replace(
|
|
286
|
-
`/${PREFIX_PLACEHOLDER}`,
|
|
287
|
-
""
|
|
288
|
-
);
|
|
289
|
-
const collected = [
|
|
290
|
-
...routeNamespaces.default || [],
|
|
291
|
-
// default
|
|
292
|
-
...namespaces || [],
|
|
293
|
-
// default
|
|
294
|
-
...routeNamespaces[standardizedPathname] || [],
|
|
295
|
-
// exact match
|
|
296
|
-
...routeNamespaces[placeholderRemovedPathname] || []
|
|
297
|
-
// exact match
|
|
298
|
-
];
|
|
299
|
-
const prefixPatterns = Object.keys(routeNamespaces).filter(
|
|
300
|
-
(pattern) => pattern.endsWith("/*")
|
|
301
|
-
);
|
|
302
|
-
for (const pattern of prefixPatterns) {
|
|
303
|
-
const basePath = pattern.replace(/\/\*$/, "");
|
|
304
|
-
if (standardizedPathname.startsWith(basePath) || placeholderRemovedPathname.startsWith(basePath)) {
|
|
305
|
-
collected.push(...routeNamespaces[pattern] || []);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
return [...new Set(collected)];
|
|
309
|
-
};
|
|
310
|
-
|
|
311
|
-
// src/shared/utils/pathname/normalize-pathname.ts
|
|
312
|
-
var normalizePathname = (rawPathname, options = {}) => {
|
|
313
|
-
const length = rawPathname.length;
|
|
314
|
-
let start = 0;
|
|
315
|
-
let end = length - 1;
|
|
316
|
-
while (start <= end && (rawPathname.codePointAt(start) ?? 0) <= 32) start++;
|
|
317
|
-
while (end >= start && (rawPathname.codePointAt(end) ?? 0) <= 32) end--;
|
|
318
|
-
if (start > end) return "/";
|
|
319
|
-
let result = "";
|
|
320
|
-
let hasSlash = false;
|
|
321
|
-
for (let i = start; i <= end; i++) {
|
|
322
|
-
const char = rawPathname[i];
|
|
323
|
-
if (char === "/") {
|
|
324
|
-
if (!hasSlash) {
|
|
325
|
-
hasSlash = true;
|
|
326
|
-
}
|
|
327
|
-
} else {
|
|
328
|
-
result += hasSlash || result === "" ? "/" + char : char;
|
|
329
|
-
hasSlash = false;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
if (options.removeLeadingSlash && result.startsWith("/")) {
|
|
333
|
-
result = result.slice(1);
|
|
334
|
-
}
|
|
335
|
-
return result || "/";
|
|
336
|
-
};
|
|
337
|
-
|
|
338
|
-
// src/shared/utils/pathname/standardize-pathname.ts
|
|
339
|
-
var standardizePathname = ({
|
|
340
|
-
config,
|
|
341
|
-
pathname
|
|
342
|
-
}) => {
|
|
343
|
-
const { routing } = config;
|
|
344
|
-
const { basePath } = routing;
|
|
345
|
-
const parts = [
|
|
346
|
-
normalizePathname(basePath),
|
|
347
|
-
PREFIX_PLACEHOLDER,
|
|
348
|
-
normalizePathname(pathname)
|
|
349
|
-
];
|
|
350
|
-
const standardizedPathname = parts.join("/").replaceAll(/\/{2,}/g, "/");
|
|
351
|
-
return normalizePathname(standardizedPathname);
|
|
352
|
-
};
|
|
353
|
-
|
|
354
|
-
// src/server/messages/load-local-messages/load-local-messages.ts
|
|
355
|
-
var loadLocalMessages = async ({
|
|
356
|
-
pool = getGlobalMessagesPool(),
|
|
357
|
-
rootDir = "messages",
|
|
358
|
-
locale,
|
|
359
|
-
fallbackLocales,
|
|
360
|
-
namespaces,
|
|
361
|
-
extraOptions: {
|
|
362
|
-
concurrency = 10,
|
|
363
|
-
cacheOptions = DEFAULT_CACHE_OPTIONS,
|
|
364
|
-
loggerOptions = { id: "default" },
|
|
365
|
-
exts,
|
|
366
|
-
messagesReader
|
|
367
|
-
} = {},
|
|
368
|
-
allowCacheWrite = false
|
|
369
|
-
}) => {
|
|
370
|
-
const baseLogger = getLogger({ ...loggerOptions });
|
|
371
|
-
const logger = baseLogger.child({ scope: "load-local-messages" });
|
|
372
|
-
const start = perf_hooks.performance.now();
|
|
373
|
-
logger.debug("Loading local messages from directory.", {
|
|
374
|
-
rootDir,
|
|
375
|
-
resolvedRootDir: path__default.default.resolve(process.cwd(), rootDir)
|
|
376
|
-
});
|
|
377
|
-
const key = normalizeCacheKey([
|
|
378
|
-
loggerOptions.id,
|
|
379
|
-
"loaderType:local",
|
|
380
|
-
rootDir,
|
|
381
|
-
locale,
|
|
382
|
-
(fallbackLocales || []).toSorted().join(","),
|
|
383
|
-
(namespaces || []).toSorted().join(",")
|
|
384
|
-
]);
|
|
385
|
-
if (cacheOptions.enabled && key) {
|
|
386
|
-
const cached = await pool?.get(key);
|
|
387
|
-
if (cached) {
|
|
388
|
-
logger.debug("Messages cache hit.", { key });
|
|
389
|
-
return cached;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
const limit = pLimit__default.default(concurrency);
|
|
393
|
-
const candidateLocales = [locale, ...fallbackLocales || []];
|
|
394
|
-
let messages;
|
|
395
|
-
for (const candidateLocale of candidateLocales) {
|
|
396
|
-
try {
|
|
397
|
-
const result = await readLocaleMessages({
|
|
398
|
-
limit,
|
|
399
|
-
rootDir,
|
|
400
|
-
locale: candidateLocale,
|
|
401
|
-
namespaces,
|
|
402
|
-
extraOptions: { loggerOptions, exts, messagesReader }
|
|
403
|
-
});
|
|
404
|
-
if (result && Object.values(result[candidateLocale] || {}).length > 0) {
|
|
405
|
-
messages = result;
|
|
406
|
-
break;
|
|
407
|
-
}
|
|
408
|
-
} catch (error) {
|
|
409
|
-
logger.error("Failed to read locale messages", {
|
|
410
|
-
locale: candidateLocale,
|
|
411
|
-
error
|
|
412
|
-
});
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
if (allowCacheWrite && cacheOptions.enabled && key && messages) {
|
|
416
|
-
await pool?.set(key, messages, cacheOptions.ttl);
|
|
417
|
-
}
|
|
418
|
-
const end = perf_hooks.performance.now();
|
|
419
|
-
const duration = Math.round(end - start);
|
|
420
|
-
logger.trace("Finished loading local messages.", {
|
|
421
|
-
loadedLocale: messages ? Object.keys(messages)[0] : void 0,
|
|
422
|
-
duration: `${duration} ms`
|
|
423
|
-
});
|
|
424
|
-
return messages;
|
|
425
|
-
};
|
|
426
|
-
|
|
427
|
-
// src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.ts
|
|
428
|
-
var fetchLocaleMessages = async ({
|
|
429
|
-
remoteUrl,
|
|
430
|
-
remoteHeaders,
|
|
431
|
-
searchParams,
|
|
432
|
-
locale,
|
|
433
|
-
extraOptions: { loggerOptions } = {}
|
|
434
|
-
}) => {
|
|
435
|
-
const baseLogger = getLogger({ ...loggerOptions });
|
|
436
|
-
const logger = baseLogger.child({ scope: "fetch-locale-messages" });
|
|
437
|
-
try {
|
|
438
|
-
const params = new URLSearchParams(searchParams);
|
|
439
|
-
params.append("locale", locale);
|
|
440
|
-
const url = `${remoteUrl}?${params.toString()}`;
|
|
441
|
-
const headers = {
|
|
442
|
-
"Content-Type": "application/json",
|
|
443
|
-
...remoteHeaders
|
|
444
|
-
};
|
|
445
|
-
const response = await fetch(url, {
|
|
446
|
-
method: "GET",
|
|
447
|
-
headers,
|
|
448
|
-
cache: "no-store"
|
|
449
|
-
});
|
|
450
|
-
if (!response.ok) {
|
|
451
|
-
throw new Error(`HTTP error ${response.status} ${response.statusText}`);
|
|
452
|
-
}
|
|
453
|
-
const data = await response.json();
|
|
454
|
-
if (!isValidMessages(data[locale])) {
|
|
455
|
-
throw new Error("JSON file does not match NamespaceMessages structure");
|
|
456
|
-
}
|
|
457
|
-
return data;
|
|
458
|
-
} catch (error) {
|
|
459
|
-
logger.warn("Fetching locale messages failed.", {
|
|
460
|
-
locale,
|
|
461
|
-
remoteUrl,
|
|
462
|
-
searchParams: decodeURIComponent(searchParams.toString()),
|
|
463
|
-
error
|
|
464
|
-
});
|
|
465
|
-
return;
|
|
466
|
-
}
|
|
467
|
-
};
|
|
468
|
-
|
|
469
|
-
// src/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.ts
|
|
470
|
-
var buildSearchParams = (params) => {
|
|
471
|
-
const searchParams = new URLSearchParams();
|
|
472
|
-
const appendParam = (key, value) => {
|
|
473
|
-
if (value === void 0 || value === null) return;
|
|
474
|
-
if (Array.isArray(value) && value.length === 0) return;
|
|
475
|
-
if (Array.isArray(value)) {
|
|
476
|
-
value.forEach((v) => v && searchParams.append(key, v));
|
|
477
|
-
} else {
|
|
478
|
-
searchParams.append(key, value);
|
|
479
|
-
}
|
|
480
|
-
};
|
|
481
|
-
Object.entries(params).forEach(([key, value]) => {
|
|
482
|
-
appendParam(key, value);
|
|
483
|
-
});
|
|
484
|
-
return searchParams;
|
|
485
|
-
};
|
|
486
|
-
|
|
487
|
-
// src/server/messages/load-remote-messages/load-remote-messages.ts
|
|
488
|
-
var loadRemoteMessages = async ({
|
|
489
|
-
pool = getGlobalMessagesPool(),
|
|
490
|
-
rootDir,
|
|
491
|
-
remoteUrl,
|
|
492
|
-
remoteHeaders,
|
|
493
|
-
locale,
|
|
494
|
-
fallbackLocales = [],
|
|
495
|
-
namespaces = [],
|
|
496
|
-
extraOptions: {
|
|
497
|
-
cacheOptions = DEFAULT_CACHE_OPTIONS,
|
|
498
|
-
loggerOptions = { id: "default" }
|
|
499
|
-
} = {},
|
|
500
|
-
allowCacheWrite
|
|
501
|
-
}) => {
|
|
502
|
-
const baseLogger = getLogger({ ...loggerOptions });
|
|
503
|
-
const logger = baseLogger.child({ scope: "load-remote-messages" });
|
|
504
|
-
const start = performance.now();
|
|
505
|
-
logger.debug("Loading remote messages from api.", { remoteUrl });
|
|
506
|
-
const key = normalizeCacheKey([
|
|
507
|
-
loggerOptions.id,
|
|
508
|
-
"loaderType:remote",
|
|
509
|
-
rootDir,
|
|
510
|
-
locale,
|
|
511
|
-
(fallbackLocales ?? []).toSorted().join(","),
|
|
512
|
-
(namespaces ?? []).toSorted().join(",")
|
|
513
|
-
]);
|
|
514
|
-
if (cacheOptions.enabled && key) {
|
|
515
|
-
const cached = await pool?.get(key);
|
|
516
|
-
if (cached) {
|
|
517
|
-
logger.debug("Messages cache hit.", { key });
|
|
518
|
-
return cached;
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
const searchParams = buildSearchParams({ rootDir, namespaces });
|
|
522
|
-
const candidateLocales = [locale, ...fallbackLocales || []];
|
|
523
|
-
let messages;
|
|
524
|
-
for (const candidateLocale of candidateLocales) {
|
|
525
|
-
try {
|
|
526
|
-
const result = await fetchLocaleMessages({
|
|
527
|
-
remoteUrl,
|
|
528
|
-
remoteHeaders,
|
|
529
|
-
searchParams,
|
|
530
|
-
locale: candidateLocale,
|
|
531
|
-
extraOptions: { loggerOptions }
|
|
532
|
-
});
|
|
533
|
-
if (result && Object.values(result[candidateLocale] || {}).length > 0) {
|
|
534
|
-
messages = result;
|
|
535
|
-
break;
|
|
536
|
-
}
|
|
537
|
-
} catch (error) {
|
|
538
|
-
logger.error("Failed to fetch locale messages.", {
|
|
539
|
-
locale: candidateLocale,
|
|
540
|
-
error
|
|
541
|
-
});
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
if (allowCacheWrite && cacheOptions.enabled && key && messages) {
|
|
545
|
-
await pool?.set(key, messages, cacheOptions.ttl);
|
|
546
|
-
}
|
|
547
|
-
const end = performance.now();
|
|
548
|
-
const duration = Math.round(end - start);
|
|
549
|
-
logger.trace("Finished loading remote messages.", {
|
|
550
|
-
loadedLocale: messages ? Object.keys(messages)[0] : void 0,
|
|
551
|
-
duration: `${duration} ms`
|
|
552
|
-
});
|
|
553
|
-
return messages;
|
|
554
|
-
};
|
|
555
|
-
|
|
556
|
-
// src/server/messages/load-messages.ts
|
|
557
|
-
var loadMessages = async ({
|
|
558
|
-
config,
|
|
559
|
-
locale,
|
|
560
|
-
pathname = "",
|
|
561
|
-
extraOptions: { exts, messagesReader } = {},
|
|
562
|
-
allowCacheWrite = false
|
|
563
|
-
}) => {
|
|
564
|
-
const baseLogger = getLogger({ id: config.id, ...config.logger });
|
|
565
|
-
const logger = baseLogger.child({ scope: "load-messages" });
|
|
566
|
-
if (!config.loader) {
|
|
567
|
-
logger.warn(
|
|
568
|
-
"No loader options have been configured in the current config."
|
|
569
|
-
);
|
|
570
|
-
return;
|
|
571
|
-
}
|
|
572
|
-
const { type, concurrency, rootDir } = config.loader;
|
|
573
|
-
const fallbackLocales = config.fallbackLocales[locale] || [];
|
|
574
|
-
const namespaces = resolveNamespaces({ config, pathname });
|
|
575
|
-
if (logger.core.level === "debug") {
|
|
576
|
-
logger.debug("Starting to load messages.", { locale });
|
|
577
|
-
}
|
|
578
|
-
logger.trace("Starting to load messages with runtime context.", {
|
|
579
|
-
loaderType: type,
|
|
580
|
-
locale,
|
|
581
|
-
fallbackLocales,
|
|
582
|
-
namespaces: namespaces && namespaces.length > 0 ? [...namespaces] : "[ALL]",
|
|
583
|
-
cache: config.cache,
|
|
584
|
-
concurrency: concurrency ?? 10
|
|
585
|
-
});
|
|
586
|
-
let loadedMessages;
|
|
587
|
-
if (type === "local") {
|
|
588
|
-
loadedMessages = await loadLocalMessages({
|
|
589
|
-
rootDir,
|
|
590
|
-
locale,
|
|
591
|
-
fallbackLocales,
|
|
592
|
-
namespaces,
|
|
593
|
-
extraOptions: {
|
|
594
|
-
concurrency,
|
|
595
|
-
cacheOptions: config.cache,
|
|
596
|
-
loggerOptions: { id: config.id, ...config.logger },
|
|
597
|
-
exts,
|
|
598
|
-
messagesReader
|
|
599
|
-
},
|
|
600
|
-
allowCacheWrite
|
|
601
|
-
});
|
|
602
|
-
} else if (type === "remote") {
|
|
603
|
-
loadedMessages = await loadRemoteMessages({
|
|
604
|
-
rootDir,
|
|
605
|
-
remoteUrl: config.loader.remoteUrl,
|
|
606
|
-
remoteHeaders: config.loader.remoteHeaders,
|
|
607
|
-
locale,
|
|
608
|
-
fallbackLocales,
|
|
609
|
-
namespaces,
|
|
610
|
-
extraOptions: {
|
|
611
|
-
cacheOptions: config.cache,
|
|
612
|
-
loggerOptions: { id: config.id, ...config.logger }
|
|
613
|
-
}
|
|
614
|
-
});
|
|
615
|
-
}
|
|
616
|
-
if (!loadedMessages || Object.keys(loadedMessages).length === 0) {
|
|
617
|
-
logger.warn("No messages found.", { locale, namespaces });
|
|
618
|
-
}
|
|
619
|
-
return loadedMessages;
|
|
620
|
-
};
|
|
621
|
-
|
|
622
|
-
// src/server/intor/intor.ts
|
|
623
|
-
var intor = async (config, i18nContext, loadMessagesOptions = {}) => {
|
|
624
|
-
const baseLogger = getLogger({ id: config.id, ...config.logger });
|
|
625
|
-
const logger = baseLogger.child({ scope: "intor" });
|
|
626
|
-
logger.info("Start Intor initialization.");
|
|
627
|
-
const { messages, loader } = config;
|
|
628
|
-
const isI18nContextFunction = typeof i18nContext === "function";
|
|
629
|
-
const context = isI18nContextFunction ? await i18nContext(config) : {
|
|
630
|
-
locale: i18nContext?.locale || config.defaultLocale,
|
|
631
|
-
pathname: i18nContext?.pathname || ""
|
|
632
|
-
};
|
|
633
|
-
const { locale, pathname } = context;
|
|
634
|
-
const source = isI18nContextFunction ? i18nContext.name : "static fallback";
|
|
635
|
-
logger.debug(`I18n context resolved via ${source}.`, context);
|
|
636
|
-
let loadedMessages;
|
|
637
|
-
if (loader) {
|
|
638
|
-
loadedMessages = await loadMessages({
|
|
639
|
-
config,
|
|
640
|
-
locale,
|
|
641
|
-
pathname,
|
|
642
|
-
extraOptions: {
|
|
643
|
-
exts: loadMessagesOptions.exts,
|
|
644
|
-
messagesReader: loadMessagesOptions.messagesReader
|
|
645
|
-
},
|
|
646
|
-
allowCacheWrite: true
|
|
647
|
-
});
|
|
648
|
-
}
|
|
649
|
-
const mergedMessages = mergeMessages(messages, loadedMessages);
|
|
650
|
-
logger.info("Messages successfully initialized.", {
|
|
651
|
-
static: { enabled: !!messages },
|
|
652
|
-
loaded: {
|
|
653
|
-
enabled: !!loadedMessages,
|
|
654
|
-
...loader ? { loaderType: loader.type } : null
|
|
655
|
-
},
|
|
656
|
-
merged: mergedMessages
|
|
657
|
-
});
|
|
658
|
-
return {
|
|
659
|
-
config,
|
|
660
|
-
initialLocale: locale,
|
|
661
|
-
pathname,
|
|
662
|
-
messages: mergedMessages
|
|
663
|
-
};
|
|
664
|
-
};
|
|
665
|
-
async function getTranslator(options) {
|
|
666
|
-
const { config, locale, pathname = "", preKey } = options;
|
|
667
|
-
const messages = await loadMessages({
|
|
668
|
-
config,
|
|
669
|
-
locale,
|
|
670
|
-
pathname,
|
|
671
|
-
extraOptions: options.extraOptions
|
|
672
|
-
});
|
|
673
|
-
const translator = new intorTranslator.Translator({
|
|
674
|
-
locale,
|
|
675
|
-
messages,
|
|
676
|
-
fallbackLocales: config.fallbackLocales,
|
|
677
|
-
loadingMessage: config.translator?.loadingMessage,
|
|
678
|
-
placeholder: config.translator?.placeholder,
|
|
679
|
-
handlers: options.handlers
|
|
680
|
-
});
|
|
681
|
-
const props = { messages, locale };
|
|
682
|
-
const scoped = translator.scoped(preKey);
|
|
683
|
-
return {
|
|
684
|
-
...props,
|
|
685
|
-
hasKey: preKey ? scoped.hasKey : translator.hasKey,
|
|
686
|
-
t: preKey ? scoped.t : translator.t
|
|
687
|
-
};
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
exports.clearLoggerPool = clearLoggerPool;
|
|
691
|
-
exports.clearMessagesPool = clearMessagesPool;
|
|
692
|
-
exports.getTranslator = getTranslator;
|
|
693
|
-
exports.intor = intor;
|
|
694
|
-
exports.loadLocalMessages = loadLocalMessages;
|
|
695
|
-
exports.loadMessages = loadMessages;
|
|
696
|
-
exports.loadRemoteMessages = loadRemoteMessages;
|