intor 2.2.14 → 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
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves the preferred locale based on the Accept-Language header and supported locales.
|
|
3
|
+
*/
|
|
4
|
+
const resolvePreferredLocale = (acceptLanguageHeader, supportedLocales) => {
|
|
5
|
+
if (!acceptLanguageHeader ||
|
|
6
|
+
!supportedLocales ||
|
|
7
|
+
supportedLocales.length === 0) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const supportedLocalesSet = new Set(supportedLocales);
|
|
11
|
+
const preferred = acceptLanguageHeader
|
|
12
|
+
.split(",")
|
|
13
|
+
.map((part) => {
|
|
14
|
+
const [lang, qValue] = part.split(";");
|
|
15
|
+
const q = qValue ? Number.parseFloat(qValue.split("=")[1]) : 1;
|
|
16
|
+
if (Number.isNaN(q)) {
|
|
17
|
+
return { lang: lang.trim(), q: 0 }; // Treat invalid q values as having 0 priority
|
|
18
|
+
}
|
|
19
|
+
return { lang: lang.trim(), q };
|
|
20
|
+
})
|
|
21
|
+
.toSorted((a, b) => b.q - a.q)
|
|
22
|
+
.find(({ lang }) => supportedLocalesSet.has(lang))?.lang;
|
|
23
|
+
return preferred;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { resolvePreferredLocale };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { LocaleMessages } from "intor-translator";
|
|
2
|
+
/**
|
|
3
|
+
* Deeply merges loaded messages into static messages by locale.
|
|
4
|
+
* - Loaded messages override static ones on conflict.
|
|
5
|
+
*/
|
|
6
|
+
export declare const mergeMessages: (staticMessages?: LocaleMessages, loadedMessages?: LocaleMessages | undefined) => LocaleMessages;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import merge from 'lodash.merge';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Deeply merges loaded messages into static messages by locale.
|
|
5
|
+
* - Loaded messages override static ones on conflict.
|
|
6
|
+
*/
|
|
7
|
+
const mergeMessages = (staticMessages = {}, loadedMessages = {}) => {
|
|
8
|
+
if (!loadedMessages)
|
|
9
|
+
return { ...staticMessages };
|
|
10
|
+
return merge({}, staticMessages, loadedMessages);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export { mergeMessages };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const CACHE_KEY_DELIMITER = "|";
|
|
2
|
+
// Helper FC
|
|
3
|
+
const sanitize = (k) => k
|
|
4
|
+
.replaceAll(/[\u200B-\u200D\uFEFF]/g, "")
|
|
5
|
+
.replaceAll(/[\r\n]/g, "")
|
|
6
|
+
.trim();
|
|
7
|
+
const normalizeCacheKey = (key, delimiter = CACHE_KEY_DELIMITER) => {
|
|
8
|
+
if (key === null || key === undefined)
|
|
9
|
+
return null;
|
|
10
|
+
if (Array.isArray(key)) {
|
|
11
|
+
if (key.length === 0)
|
|
12
|
+
return null;
|
|
13
|
+
const normalized = key.map((k) => {
|
|
14
|
+
if (k === null)
|
|
15
|
+
return "__null";
|
|
16
|
+
if (k === undefined)
|
|
17
|
+
return "__undefined";
|
|
18
|
+
if (typeof k === "boolean")
|
|
19
|
+
return k ? "__true" : "__false";
|
|
20
|
+
return sanitize(String(k));
|
|
21
|
+
});
|
|
22
|
+
return normalized.join(delimiter);
|
|
23
|
+
}
|
|
24
|
+
if (typeof key === "boolean")
|
|
25
|
+
return key ? "__true" : "__false";
|
|
26
|
+
return String(key);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { normalizeCacheKey };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../config/types/intor-config.types";
|
|
2
|
+
interface ExtractPathnameOptions {
|
|
3
|
+
config: IntorResolvedConfig;
|
|
4
|
+
pathname: string;
|
|
5
|
+
}
|
|
6
|
+
interface ExtractPathnameResult {
|
|
7
|
+
basePath: string;
|
|
8
|
+
prefixedPathname: string;
|
|
9
|
+
unprefixedPathname: string;
|
|
10
|
+
maybeLocale: string;
|
|
11
|
+
isLocalePrefixed: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Extracts basePath and locale info from a raw pathname.
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* extractPathname({ config, pathname: '/app/en/about' });
|
|
18
|
+
* => {
|
|
19
|
+
* basePath: '/app',
|
|
20
|
+
* prefixedPathname: '/en/about',
|
|
21
|
+
* unprefixedPathname: '/about',
|
|
22
|
+
* maybeLocale: 'en',
|
|
23
|
+
* isLocalePrefixed: true
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare const extractPathname: ({ config, pathname: rawPathname, }: ExtractPathnameOptions) => ExtractPathnameResult;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { normalizePathname } from './normalize-pathname.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Extracts basePath and locale info from a raw pathname.
|
|
5
|
+
*
|
|
6
|
+
* ```ts
|
|
7
|
+
* extractPathname({ config, pathname: '/app/en/about' });
|
|
8
|
+
* => {
|
|
9
|
+
* basePath: '/app',
|
|
10
|
+
* prefixedPathname: '/en/about',
|
|
11
|
+
* unprefixedPathname: '/about',
|
|
12
|
+
* maybeLocale: 'en',
|
|
13
|
+
* isLocalePrefixed: true
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
const extractPathname = ({ config, pathname: rawPathname, }) => {
|
|
18
|
+
const { routing, defaultLocale } = config;
|
|
19
|
+
const { basePath, prefix } = routing;
|
|
20
|
+
const normalizedPathname = normalizePathname(rawPathname);
|
|
21
|
+
let prefixedPathname = normalizedPathname;
|
|
22
|
+
// Remove basePath if exists
|
|
23
|
+
if (basePath && normalizedPathname.startsWith(basePath + "/")) {
|
|
24
|
+
prefixedPathname = normalizedPathname.slice(basePath.length) || "/";
|
|
25
|
+
}
|
|
26
|
+
else if (basePath && normalizedPathname === basePath) {
|
|
27
|
+
prefixedPathname = "/";
|
|
28
|
+
}
|
|
29
|
+
// Extract potential locale from pathname
|
|
30
|
+
const pathPart = prefixedPathname.split("/").find(Boolean);
|
|
31
|
+
const maybeLocale = pathPart || "";
|
|
32
|
+
const isLocalePrefixed = config.supportedLocales?.includes(maybeLocale); // Check by supportedLocales
|
|
33
|
+
// prefix: "none"
|
|
34
|
+
let unprefixedPathname = prefixedPathname;
|
|
35
|
+
// prefix: "all"
|
|
36
|
+
if (prefix === "all") {
|
|
37
|
+
if (isLocalePrefixed) {
|
|
38
|
+
unprefixedPathname =
|
|
39
|
+
prefixedPathname.slice(maybeLocale.length + 1) || "/";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// prefix: "except-default",
|
|
43
|
+
else if (prefix === "except-default") {
|
|
44
|
+
if (maybeLocale && maybeLocale !== defaultLocale && isLocalePrefixed) {
|
|
45
|
+
unprefixedPathname =
|
|
46
|
+
prefixedPathname.slice(maybeLocale.length + 1) || "/";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
basePath,
|
|
51
|
+
prefixedPathname,
|
|
52
|
+
unprefixedPathname,
|
|
53
|
+
maybeLocale,
|
|
54
|
+
isLocalePrefixed: Boolean(isLocalePrefixed),
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export { extractPathname };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize a raw pathname string to ensure consistent formatting.
|
|
3
|
+
*
|
|
4
|
+
* - Trims leading and trailing whitespace (code points ≤ 32).
|
|
5
|
+
* - Collapses consecutive slashes into a single slash.
|
|
6
|
+
* - Ensures a leading slash and removes trailing slashes.
|
|
7
|
+
* - Optionally removes the leading slash.
|
|
8
|
+
* - Avoids intermediate array allocations for performance.
|
|
9
|
+
*/
|
|
10
|
+
export declare const normalizePathname: (rawPathname: string, options?: {
|
|
11
|
+
removeLeadingSlash?: boolean;
|
|
12
|
+
}) => string;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize a raw pathname string to ensure consistent formatting.
|
|
3
|
+
*
|
|
4
|
+
* - Trims leading and trailing whitespace (code points ≤ 32).
|
|
5
|
+
* - Collapses consecutive slashes into a single slash.
|
|
6
|
+
* - Ensures a leading slash and removes trailing slashes.
|
|
7
|
+
* - Optionally removes the leading slash.
|
|
8
|
+
* - Avoids intermediate array allocations for performance.
|
|
9
|
+
*/
|
|
10
|
+
const normalizePathname = (rawPathname, options = {}) => {
|
|
11
|
+
const length = rawPathname.length;
|
|
12
|
+
let start = 0;
|
|
13
|
+
let end = length - 1;
|
|
14
|
+
// Trim leading whitespace
|
|
15
|
+
while (start <= end && (rawPathname.codePointAt(start) ?? 0) <= 32)
|
|
16
|
+
start++;
|
|
17
|
+
// Trim trailing whitespace
|
|
18
|
+
while (end >= start && (rawPathname.codePointAt(end) ?? 0) <= 32)
|
|
19
|
+
end--;
|
|
20
|
+
if (start > end)
|
|
21
|
+
return "/"; // Only whitespace
|
|
22
|
+
let result = "";
|
|
23
|
+
let hasSlash = false;
|
|
24
|
+
for (let i = start; i <= end; i++) {
|
|
25
|
+
const char = rawPathname[i];
|
|
26
|
+
if (char === "/") {
|
|
27
|
+
if (!hasSlash) {
|
|
28
|
+
hasSlash = true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
result += hasSlash || result === "" ? "/" + char : char;
|
|
33
|
+
hasSlash = false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// If the result has a leading slash and we want to remove it, do so
|
|
37
|
+
if (options.removeLeadingSlash && result.startsWith("/")) {
|
|
38
|
+
result = result.slice(1);
|
|
39
|
+
}
|
|
40
|
+
return result || "/";
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export { normalizePathname };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../config/types/intor-config.types";
|
|
2
|
+
interface StandardizePathnameOptions {
|
|
3
|
+
config: IntorResolvedConfig;
|
|
4
|
+
pathname: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Standardize a pathname by prepending the base path and prefix placeholder,
|
|
8
|
+
* then normalize the result to remove redundant slashes.
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* standardizePathname({ config, pathname: "/cms" });
|
|
12
|
+
* // basePath: "/asd/qwe"
|
|
13
|
+
* // prefixPlaceHolder: "{locale}"
|
|
14
|
+
* => "/asd/qwe/{locale}/cms"
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const standardizePathname: ({ config, pathname, }: StandardizePathnameOptions) => string;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { PREFIX_PLACEHOLDER } from '../../constants/prefix-placeholder.js';
|
|
2
|
+
import { normalizePathname } from './normalize-pathname.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Standardize a pathname by prepending the base path and prefix placeholder,
|
|
6
|
+
* then normalize the result to remove redundant slashes.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* standardizePathname({ config, pathname: "/cms" });
|
|
10
|
+
* // basePath: "/asd/qwe"
|
|
11
|
+
* // prefixPlaceHolder: "{locale}"
|
|
12
|
+
* => "/asd/qwe/{locale}/cms"
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
const standardizePathname = ({ config, pathname, }) => {
|
|
16
|
+
const { routing } = config;
|
|
17
|
+
const { basePath } = routing;
|
|
18
|
+
// Normalize each segment before join to avoid redundant slashes
|
|
19
|
+
const parts = [
|
|
20
|
+
normalizePathname(basePath),
|
|
21
|
+
PREFIX_PLACEHOLDER,
|
|
22
|
+
normalizePathname(pathname),
|
|
23
|
+
];
|
|
24
|
+
// Avoid double slashes between segments
|
|
25
|
+
const standardizedPathname = parts.join("/").replaceAll(/\/{2,}/g, "/");
|
|
26
|
+
// Final normalization to ensure leading slash, no trailing
|
|
27
|
+
return normalizePathname(standardizedPathname);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export { standardizePathname };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../config/types/intor-config.types";
|
|
2
|
+
interface ResolveNamespacesOptions {
|
|
3
|
+
config: IntorResolvedConfig;
|
|
4
|
+
pathname: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolves namespaces based on pathname.
|
|
8
|
+
*/
|
|
9
|
+
export declare const resolveNamespaces: ({ config, pathname, }: ResolveNamespacesOptions) => string[] | undefined;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { PREFIX_PLACEHOLDER } from '../constants/prefix-placeholder.js';
|
|
2
|
+
import { standardizePathname } from './pathname/standardize-pathname.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Resolves namespaces based on pathname.
|
|
6
|
+
*/
|
|
7
|
+
const resolveNamespaces = ({ config, pathname, }) => {
|
|
8
|
+
const { loader } = config;
|
|
9
|
+
const { routeNamespaces = {}, namespaces } = loader || {};
|
|
10
|
+
if (Object.keys(routeNamespaces).length === 0 && !namespaces)
|
|
11
|
+
return undefined;
|
|
12
|
+
// "/{locale}/...", "__basePath__/{locale}/...""
|
|
13
|
+
const standardizedPathname = standardizePathname({ config, pathname });
|
|
14
|
+
// "/...", "__basePath__/...""
|
|
15
|
+
const placeholderRemovedPathname = standardizedPathname.replace(`/${PREFIX_PLACEHOLDER}`, "");
|
|
16
|
+
const collected = [
|
|
17
|
+
...(routeNamespaces.default || []), // default
|
|
18
|
+
...(namespaces || []), // default
|
|
19
|
+
...(routeNamespaces[standardizedPathname] || []), // exact match
|
|
20
|
+
...(routeNamespaces[placeholderRemovedPathname] || []), // exact match
|
|
21
|
+
];
|
|
22
|
+
const prefixPatterns = Object.keys(routeNamespaces).filter((pattern) => pattern.endsWith("/*"));
|
|
23
|
+
for (const pattern of prefixPatterns) {
|
|
24
|
+
const basePath = pattern.replace(/\/\*$/, "");
|
|
25
|
+
if (standardizedPathname.startsWith(basePath) ||
|
|
26
|
+
placeholderRemovedPathname.startsWith(basePath)) {
|
|
27
|
+
collected.push(...(routeNamespaces[pattern] || [])); // match pattern
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return [...new Set(collected)];
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export { resolveNamespaces };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "intor",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.15",
|
|
4
4
|
"description": "A modular and extensible i18n core designed for TypeScript and JavaScript projects. Intor enables custom translation logic with support for both frontend and backend environments, featuring runtime configuration, caching, adapters, and message loaders.",
|
|
5
5
|
"author": "Yiming Liao",
|
|
6
6
|
"license": "MIT",
|
|
@@ -26,44 +26,34 @@
|
|
|
26
26
|
],
|
|
27
27
|
"exports": {
|
|
28
28
|
".": {
|
|
29
|
-
"types": "./dist/index.d.ts",
|
|
30
|
-
"import": "./dist/index.js"
|
|
31
|
-
"require": "./dist/index.cjs"
|
|
29
|
+
"types": "./dist/exports/index.d.ts",
|
|
30
|
+
"import": "./dist/exports/index.js"
|
|
32
31
|
},
|
|
33
32
|
"./config": {
|
|
34
|
-
"types": "./dist/config/index.d.ts",
|
|
35
|
-
"import": "./dist/config/index.js"
|
|
36
|
-
"require": "./dist/config/index.cjs"
|
|
33
|
+
"types": "./dist/exports/config/index.d.ts",
|
|
34
|
+
"import": "./dist/exports/config/index.js"
|
|
37
35
|
},
|
|
38
36
|
"./server": {
|
|
39
|
-
"types": "./dist/server/index.d.ts",
|
|
40
|
-
"import": "./dist/server/index.js"
|
|
41
|
-
"require": "./dist/server/index.cjs"
|
|
37
|
+
"types": "./dist/exports/server/index.d.ts",
|
|
38
|
+
"import": "./dist/exports/server/index.js"
|
|
42
39
|
},
|
|
43
40
|
"./react": {
|
|
44
|
-
"types": "./dist/react/index.d.ts",
|
|
45
|
-
"import": "./dist/react/index.js"
|
|
46
|
-
"require": "./dist/react/index.cjs"
|
|
41
|
+
"types": "./dist/exports/react/index.d.ts",
|
|
42
|
+
"import": "./dist/exports/react/index.js"
|
|
47
43
|
},
|
|
48
44
|
"./next": {
|
|
49
|
-
"types": "./dist/next/index.d.ts",
|
|
50
|
-
"import": "./dist/next/index.js"
|
|
51
|
-
"require": "./dist/next/index.cjs"
|
|
45
|
+
"types": "./dist/exports/next/index.d.ts",
|
|
46
|
+
"import": "./dist/exports/next/index.js"
|
|
52
47
|
},
|
|
53
48
|
"./next/middleware": {
|
|
54
|
-
"types": "./dist/next/middleware/index.d.ts",
|
|
55
|
-
"import": "./dist/next/middleware/index.js"
|
|
56
|
-
"require": "./dist/next/middleware/index.cjs"
|
|
49
|
+
"types": "./dist/exports/next/middleware/index.d.ts",
|
|
50
|
+
"import": "./dist/exports/next/middleware/index.js"
|
|
57
51
|
},
|
|
58
52
|
"./next/server": {
|
|
59
|
-
"types": "./dist/next/server/index.d.ts",
|
|
60
|
-
"import": "./dist/next/server/index.js"
|
|
61
|
-
"require": "./dist/next/server/index.cjs"
|
|
53
|
+
"types": "./dist/exports/next/server/index.d.ts",
|
|
54
|
+
"import": "./dist/exports/next/server/index.js"
|
|
62
55
|
}
|
|
63
56
|
},
|
|
64
|
-
"main": "./dist/index.cjs",
|
|
65
|
-
"module": "./dist/index.js",
|
|
66
|
-
"types": "./dist/index.d.ts",
|
|
67
57
|
"files": [
|
|
68
58
|
"dist",
|
|
69
59
|
"README.md",
|
|
@@ -71,13 +61,18 @@
|
|
|
71
61
|
],
|
|
72
62
|
"type": "module",
|
|
73
63
|
"scripts": {
|
|
74
|
-
"build": "tsup",
|
|
75
|
-
"prepublishOnly": "yarn build",
|
|
76
64
|
"type": "tsc --noEmit",
|
|
77
65
|
"lint": "eslint",
|
|
78
66
|
"lint:debug": "eslint --debug",
|
|
79
67
|
"test": "vitest",
|
|
80
|
-
"knip": "knip --config .config/knip.config.ts"
|
|
68
|
+
"knip": "knip --config .config/knip.config.ts",
|
|
69
|
+
"clean": "rm -rf dist",
|
|
70
|
+
"build:core": "rollup -c .config/rollup/core.js",
|
|
71
|
+
"build:react": "rollup -c .config/rollup/react.js",
|
|
72
|
+
"build:next": "rollup -c .config/rollup/next.js",
|
|
73
|
+
"build:dts": "rollup -c .config/rollup/dts.js",
|
|
74
|
+
"build": "yarn clean && yarn build:core && yarn build:react && yarn build:next && yarn tsc -p tsconfig.build.json && yarn tsc-alias tsconfig.build.json --outDir dist",
|
|
75
|
+
"prepublishOnly": "yarn build"
|
|
81
76
|
},
|
|
82
77
|
"dependencies": {
|
|
83
78
|
"intor-translator": "^1.1.5",
|
|
@@ -88,11 +83,12 @@
|
|
|
88
83
|
},
|
|
89
84
|
"devDependencies": {
|
|
90
85
|
"@intor/cli": "^0.1.2",
|
|
86
|
+
"@rollup/plugin-typescript": "^12.3.0",
|
|
91
87
|
"@types/lodash.merge": "^4.6.9",
|
|
92
88
|
"@types/node": "^24.10.1",
|
|
93
89
|
"@types/react": "^19.0.0",
|
|
94
90
|
"@types/react-dom": "^19.0.0",
|
|
95
|
-
"@vitest/coverage-v8": "4.0.
|
|
91
|
+
"@vitest/coverage-v8": "4.0.13",
|
|
96
92
|
"eslint": "^9.27.0",
|
|
97
93
|
"eslint-config-prettier": "^10.1.8",
|
|
98
94
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
@@ -108,7 +104,9 @@
|
|
|
108
104
|
"react-dom": "^19.0.0",
|
|
109
105
|
"remark": "^15.0.1",
|
|
110
106
|
"remark-gfm": "^4.0.1",
|
|
111
|
-
"
|
|
107
|
+
"rollup": "^4.53.3",
|
|
108
|
+
"rollup-plugin-preserve-directives": "^0.4.0",
|
|
109
|
+
"tsc-alias": "^1.8.16",
|
|
112
110
|
"typescript": "^5.8.3",
|
|
113
111
|
"typescript-eslint": "^8.32.1",
|
|
114
112
|
"vitest": "^4.0.9"
|
package/dist/config/index.cjs
DELETED
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// src/config/constants/cache.constants.ts
|
|
4
|
-
var DEFAULT_CACHE_OPTIONS = {
|
|
5
|
-
enabled: process.env.NODE_ENV === "production",
|
|
6
|
-
ttl: 60 * 60 * 1e3
|
|
7
|
-
// 1 hour
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
// src/config/resolvers/resolve-cache-options.ts
|
|
11
|
-
var resolveCacheOptions = (cache) => {
|
|
12
|
-
return {
|
|
13
|
-
...DEFAULT_CACHE_OPTIONS,
|
|
14
|
-
...cache
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
// src/config/constants/cookie.constants.ts
|
|
19
|
-
var DEFAULT_COOKIE_OPTIONS = {
|
|
20
|
-
enabled: true,
|
|
21
|
-
autoSetCookie: true,
|
|
22
|
-
name: "intor.i18n.locale",
|
|
23
|
-
domain: null,
|
|
24
|
-
path: "/",
|
|
25
|
-
maxAge: 60 * 60 * 24 * 365,
|
|
26
|
-
// 365 days
|
|
27
|
-
httpOnly: false,
|
|
28
|
-
secure: process.env.NODE_ENV !== "development",
|
|
29
|
-
sameSite: "lax"
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
// src/config/resolvers/resolve-cookie-options.ts
|
|
33
|
-
var resolveCookieOptions = (cookie = {}) => {
|
|
34
|
-
return {
|
|
35
|
-
...DEFAULT_COOKIE_OPTIONS,
|
|
36
|
-
...cookie
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
// src/config/resolvers/resolve-fallback-locales.ts
|
|
41
|
-
var resolveFallbackLocales = (config, supportedLocales) => {
|
|
42
|
-
const { defaultLocale, fallbackLocales } = config;
|
|
43
|
-
if (!fallbackLocales || typeof fallbackLocales !== "object") {
|
|
44
|
-
return {};
|
|
45
|
-
}
|
|
46
|
-
const supportedSet = new Set(supportedLocales);
|
|
47
|
-
const validMap = {};
|
|
48
|
-
const invalidFallbackMap = /* @__PURE__ */ new Map();
|
|
49
|
-
for (const [locale, fallbacks] of Object.entries(fallbackLocales)) {
|
|
50
|
-
const fallbackArray = Array.isArray(fallbacks) ? fallbacks : [];
|
|
51
|
-
const validFallbacks = fallbackArray.filter(
|
|
52
|
-
(fallback) => fallback === "default" || supportedSet.has(fallback) || fallback === defaultLocale
|
|
53
|
-
);
|
|
54
|
-
const invalidFallbacks = fallbackArray.filter(
|
|
55
|
-
(fallback) => fallback !== "default" && !supportedSet.has(fallback) && fallback !== defaultLocale
|
|
56
|
-
);
|
|
57
|
-
if (invalidFallbacks.length > 0) {
|
|
58
|
-
invalidFallbackMap.set(locale, invalidFallbacks);
|
|
59
|
-
}
|
|
60
|
-
if (validFallbacks.length > 0) {
|
|
61
|
-
validMap[locale] = validFallbacks;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
for (const [locale, invalids] of invalidFallbackMap.entries()) {
|
|
65
|
-
console.warn(
|
|
66
|
-
`Invalid fallback locales for "${locale}"`,
|
|
67
|
-
{ invalids: [...invalids] },
|
|
68
|
-
{ scope: "resolveFallbackLocales" }
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
return validMap;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
// src/config/constants/routing.constants.ts
|
|
75
|
-
var DEFAULT_ROUTING_OPTIONS = {
|
|
76
|
-
prefix: "none",
|
|
77
|
-
firstVisit: {
|
|
78
|
-
localeSource: "browser",
|
|
79
|
-
redirect: true
|
|
80
|
-
},
|
|
81
|
-
basePath: "/"
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
// src/shared/utils/pathname/normalize-pathname.ts
|
|
85
|
-
var normalizePathname = (rawPathname, options = {}) => {
|
|
86
|
-
const length = rawPathname.length;
|
|
87
|
-
let start = 0;
|
|
88
|
-
let end = length - 1;
|
|
89
|
-
while (start <= end && (rawPathname.codePointAt(start) ?? 0) <= 32) start++;
|
|
90
|
-
while (end >= start && (rawPathname.codePointAt(end) ?? 0) <= 32) end--;
|
|
91
|
-
if (start > end) return "/";
|
|
92
|
-
let result = "";
|
|
93
|
-
let hasSlash = false;
|
|
94
|
-
for (let i = start; i <= end; i++) {
|
|
95
|
-
const char = rawPathname[i];
|
|
96
|
-
if (char === "/") {
|
|
97
|
-
if (!hasSlash) {
|
|
98
|
-
hasSlash = true;
|
|
99
|
-
}
|
|
100
|
-
} else {
|
|
101
|
-
result += hasSlash || result === "" ? "/" + char : char;
|
|
102
|
-
hasSlash = false;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (options.removeLeadingSlash && result.startsWith("/")) {
|
|
106
|
-
result = result.slice(1);
|
|
107
|
-
}
|
|
108
|
-
return result || "/";
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
// src/config/resolvers/resolve-routing-options.ts
|
|
112
|
-
var resolveRoutingOptions = (routing = {}) => {
|
|
113
|
-
return {
|
|
114
|
-
...DEFAULT_ROUTING_OPTIONS,
|
|
115
|
-
...routing,
|
|
116
|
-
firstVisit: {
|
|
117
|
-
...DEFAULT_ROUTING_OPTIONS.firstVisit,
|
|
118
|
-
...routing.firstVisit
|
|
119
|
-
},
|
|
120
|
-
basePath: normalizePathname(routing?.basePath || "")
|
|
121
|
-
};
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
// src/shared/error/intor-error.ts
|
|
125
|
-
var IntorError = class extends Error {
|
|
126
|
-
code;
|
|
127
|
-
id;
|
|
128
|
-
constructor({ message, code, id }) {
|
|
129
|
-
const fullMessage = id ? `[${id}] ${message}` : message;
|
|
130
|
-
super(fullMessage);
|
|
131
|
-
this.name = "IntorError";
|
|
132
|
-
this.id = id;
|
|
133
|
-
this.code = code;
|
|
134
|
-
Object.setPrototypeOf(this, new.target.prototype);
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
// src/config/validators/validate-default-locale.ts
|
|
139
|
-
var validateDefaultLocale = (config, supportedLocales) => {
|
|
140
|
-
const { id, defaultLocale } = config;
|
|
141
|
-
if (!defaultLocale) {
|
|
142
|
-
throw new IntorError({
|
|
143
|
-
id,
|
|
144
|
-
code: "INTOR_MISSING_DEFAULT_LOCALE" /* MISSING_DEFAULT_LOCALE */,
|
|
145
|
-
message: `The defaultLocale is undefined`
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
if (!supportedLocales.includes(defaultLocale)) {
|
|
149
|
-
throw new IntorError({
|
|
150
|
-
id,
|
|
151
|
-
code: "INTOR_UNSUPPORTED_DEFAULT_LOCALE" /* UNSUPPORTED_DEFAULT_LOCALE */,
|
|
152
|
-
message: `The defaultLocale "${defaultLocale}" is not included in the supportedLocales.`
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
return defaultLocale;
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
// src/config/validators/validate-supported-locales.ts
|
|
159
|
-
var validateSupportedLocales = (config) => {
|
|
160
|
-
const { id, loader, supportedLocales } = config;
|
|
161
|
-
if (loader && !supportedLocales) {
|
|
162
|
-
throw new IntorError({
|
|
163
|
-
id,
|
|
164
|
-
code: "INTOR_MISSING_SUPPORTED_LOCALES" /* MISSING_SUPPORTED_LOCALES */,
|
|
165
|
-
message: `"supportedLocales" is required when using loader, but it is missing.`
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
return supportedLocales || Object.keys(config.messages || {});
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
// src/config/define-intor-config.ts
|
|
172
|
-
var defineIntorConfig = (config) => {
|
|
173
|
-
const id = config.id || `ID${Math.random().toString(36).slice(2, 6)}`;
|
|
174
|
-
const supportedLocales = validateSupportedLocales(config);
|
|
175
|
-
const defaultLocale = validateDefaultLocale(config, supportedLocales);
|
|
176
|
-
const fallbackLocales = resolveFallbackLocales(config, supportedLocales);
|
|
177
|
-
const cookie = resolveCookieOptions(config.cookie);
|
|
178
|
-
const routing = resolveRoutingOptions(config.routing);
|
|
179
|
-
const cache = resolveCacheOptions(config.cache);
|
|
180
|
-
return {
|
|
181
|
-
id,
|
|
182
|
-
messages: config.messages,
|
|
183
|
-
loader: config.loader,
|
|
184
|
-
defaultLocale,
|
|
185
|
-
supportedLocales,
|
|
186
|
-
fallbackLocales,
|
|
187
|
-
translator: config.translator,
|
|
188
|
-
cookie,
|
|
189
|
-
routing,
|
|
190
|
-
logger: config.logger,
|
|
191
|
-
cache
|
|
192
|
-
};
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
exports.DEFAULT_CACHE_OPTIONS = DEFAULT_CACHE_OPTIONS;
|
|
196
|
-
exports.DEFAULT_COOKIE_OPTIONS = DEFAULT_COOKIE_OPTIONS;
|
|
197
|
-
exports.DEFAULT_ROUTING_OPTIONS = DEFAULT_ROUTING_OPTIONS;
|
|
198
|
-
exports.defineIntorConfig = defineIntorConfig;
|