intor 2.2.14 → 2.3.0
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/proxy/index.d.ts +2 -0
- package/dist/exports/next/proxy/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/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/proxy/handle-prefix/handle-prefix-all.d.ts +12 -0
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.js +60 -0
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.d.ts +16 -0
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.js +81 -0
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.d.ts +10 -0
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.js +22 -0
- package/dist/src/adapters/next/proxy/index.d.ts +2 -0
- package/dist/src/adapters/next/proxy/intor-proxy.d.ts +6 -0
- package/dist/src/adapters/next/proxy/intor-proxy.js +22 -0
- package/dist/src/adapters/next/proxy/utils/create-response.d.ts +17 -0
- package/dist/src/adapters/next/proxy/utils/create-response.js +42 -0
- package/dist/src/adapters/next/proxy/utils/determine-initial-locale.d.ts +8 -0
- package/dist/src/adapters/next/proxy/utils/determine-initial-locale.js +28 -0
- package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.d.ts +15 -0
- package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.js +24 -0
- package/dist/src/adapters/next/proxy/utils/set-pathname-header.d.ts +12 -0
- package/dist/src/adapters/next/proxy/utils/set-pathname-header.js +13 -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 +32 -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,4 @@
|
|
|
1
|
+
export { defineIntorConfig } from '../../src/config/define-intor-config.js';
|
|
2
|
+
export { DEFAULT_CACHE_OPTIONS } from '../../src/config/constants/cache.constants.js';
|
|
3
|
+
export { DEFAULT_COOKIE_OPTIONS } from '../../src/config/constants/cookie.constants.js';
|
|
4
|
+
export { DEFAULT_ROUTING_OPTIONS } from '../../src/config/constants/routing.constants.js';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** intor — main */
|
|
2
|
+
export { PREFIX_PLACEHOLDER } from "../src/shared/constants/prefix-placeholder";
|
|
3
|
+
export { mergeMessages, normalizeCacheKey, resolveNamespaces, normalizeLocale, resolvePreferredLocale, extractPathname, normalizePathname, standardizePathname, } from "../src/shared/utils";
|
|
4
|
+
export { IntorError, IntorErrorCode } from "../src/shared/error";
|
|
5
|
+
export { Translator, type TranslateHandlers, type FormatHandler, type LoadingHandler, type MissingHandler, type TranslateHandlerContext, type Locale, type FallbackLocalesMap, type NestedMessage, type LocaleMessages, type LocalizedMessagesUnion, type Replacement, type NodeKeys, type LeafKeys, type LocalizedLeafKeys, type ScopedLeafKeys, } from "intor-translator";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { PREFIX_PLACEHOLDER } from '../src/shared/constants/prefix-placeholder.js';
|
|
2
|
+
export { mergeMessages } from '../src/shared/utils/merge-messages.js';
|
|
3
|
+
export { normalizeCacheKey } from '../src/shared/utils/normalize-cache-key.js';
|
|
4
|
+
export { resolveNamespaces } from '../src/shared/utils/resolve-namespaces.js';
|
|
5
|
+
export { normalizeLocale } from '../src/shared/utils/locale/normalize-locale.js';
|
|
6
|
+
export { resolvePreferredLocale } from '../src/shared/utils/locale/resolve-preferred-locale.js';
|
|
7
|
+
export { extractPathname } from '../src/shared/utils/pathname/extract-pathname.js';
|
|
8
|
+
export { normalizePathname } from '../src/shared/utils/pathname/normalize-pathname.js';
|
|
9
|
+
export { standardizePathname } from '../src/shared/utils/pathname/standardize-pathname.js';
|
|
10
|
+
export { IntorError, IntorErrorCode } from '../src/shared/error/intor-error.js';
|
|
11
|
+
export { Translator } from 'intor-translator';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** intor — next / main (client) */
|
|
2
|
+
export { Link, usePathname, useRouter, redirect, } from "../../src/adapters/next/navigation";
|
|
3
|
+
export { IntorProvider, type IntorProviderProps, TranslateHandlersProvider, type TranslateHandlersProviderProps, useTranslator, } from "../../src/client/react";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Link } from '../../src/adapters/next/navigation/link.js';
|
|
2
|
+
export { usePathname } from '../../src/adapters/next/navigation/use-pathname.js';
|
|
3
|
+
export { useRouter } from '../../src/adapters/next/navigation/use-router.js';
|
|
4
|
+
export { redirect } from '../../src/adapters/next/navigation/redirect.js';
|
|
5
|
+
export { IntorProvider } from '../../src/client/react/contexts/intor-provider/intor-provider.js';
|
|
6
|
+
export { TranslateHandlersProvider } from '../../src/client/react/contexts/translate-handlers/provider.js';
|
|
7
|
+
import 'react';
|
|
8
|
+
import '../../src/client/react/contexts/translate-handlers/context.js';
|
|
9
|
+
export { useTranslator } from '../../src/client/react/hooks/use-translator.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { IntorProvider } from '../../src/client/react/contexts/intor-provider/intor-provider.js';
|
|
2
|
+
export { TranslateHandlersProvider } from '../../src/client/react/contexts/translate-handlers/provider.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import '../../src/client/react/contexts/translate-handlers/context.js';
|
|
5
|
+
export { useTranslator } from '../../src/client/react/hooks/use-translator.js';
|
|
6
|
+
export { getInitialLocale } from '../../src/client/shared/utils/get-initial-locale.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/** intor — server */
|
|
2
|
+
export { intor, type I18nContext, type IntorResult, loadMessages, loadLocalMessages, type LoadLocalMessagesOptions, loadRemoteMessages, type LoadRemoteMessagesOptions, type Messages, type MessagesReader, clearMessagesPool, getTranslator, clearLoggerPool, } from "../../src/server";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { intor } from '../../src/server/intor/intor.js';
|
|
2
|
+
export { loadMessages } from '../../src/server/messages/load-messages.js';
|
|
3
|
+
export { loadLocalMessages } from '../../src/server/messages/load-local-messages/load-local-messages.js';
|
|
4
|
+
export { loadRemoteMessages } from '../../src/server/messages/load-remote-messages/load-remote-messages.js';
|
|
5
|
+
export { clearMessagesPool } from '../../src/server/messages/shared/global-messages-pool.js';
|
|
6
|
+
export { getTranslator } from '../../src/server/translator/get-translator.js';
|
|
7
|
+
export { clearLoggerPool } from '../../src/server/shared/logger/global-logger-pool.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { GenLocale } from "../../../shared/types/generated.types";
|
|
2
|
+
import type { Url } from "next/dist/shared/lib/router/router";
|
|
3
|
+
import type { LinkProps as NextLinkProps } from "next/link";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
interface LinkProps extends Omit<NextLinkProps, "href">, Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "href"> {
|
|
6
|
+
href?: Url;
|
|
7
|
+
locale?: GenLocale;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Localized Link component
|
|
11
|
+
*
|
|
12
|
+
* - Wraps Next.js Link and handles locale switching.
|
|
13
|
+
* - Full reload occurs only if the locale changes and requires it; otherwise updates context.
|
|
14
|
+
*/
|
|
15
|
+
export declare const Link: ({ href, locale, children, onClick, ...props }: LinkProps) => React.JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { formatUrl } from 'next/dist/shared/lib/router/utils/format-url';
|
|
4
|
+
import NextLink from 'next/link';
|
|
5
|
+
import 'react';
|
|
6
|
+
import { useLocaleSwitch } from './utils/use-locale-switch.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Localized Link component
|
|
10
|
+
*
|
|
11
|
+
* - Wraps Next.js Link and handles locale switching.
|
|
12
|
+
* - Full reload occurs only if the locale changes and requires it; otherwise updates context.
|
|
13
|
+
*/
|
|
14
|
+
const Link = ({ href, locale, children, onClick, ...props }) => {
|
|
15
|
+
const formatted = typeof href === "string" ? href : href ? formatUrl(href) : undefined;
|
|
16
|
+
const { resolveHref, switchLocale } = useLocaleSwitch();
|
|
17
|
+
const { resolvedHref } = resolveHref({ href: formatted, locale });
|
|
18
|
+
const handleClick = (e) => {
|
|
19
|
+
onClick?.(e);
|
|
20
|
+
switchLocale({ href: formatted, locale });
|
|
21
|
+
};
|
|
22
|
+
return (jsx(NextLink, { href: resolvedHref, onClick: handleClick, ...props, children: children }));
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { Link };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../config";
|
|
2
|
+
import type { GenLocale } from "../../../shared/types/generated.types";
|
|
3
|
+
import type { RedirectType } from "next/navigation";
|
|
4
|
+
/**
|
|
5
|
+
* redirect utility.
|
|
6
|
+
*
|
|
7
|
+
* - Wraps Next.js redirect and applies locale-aware navigation.
|
|
8
|
+
* - Automatically prefixes the pathname with the correct locale.
|
|
9
|
+
* - External URLs are redirected directly without modification.
|
|
10
|
+
*/
|
|
11
|
+
export declare const redirect: ({ config, locale, url, type, }: {
|
|
12
|
+
config: IntorResolvedConfig;
|
|
13
|
+
locale?: GenLocale;
|
|
14
|
+
url: string;
|
|
15
|
+
type?: RedirectType | undefined;
|
|
16
|
+
}) => Promise<never>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { redirect as redirect$1 } from 'next/navigation';
|
|
2
|
+
import { getI18nContext } from '../server/get-i18n-context.js';
|
|
3
|
+
import 'intor-translator';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import '../../../config/constants/cache.constants.js';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
import { localizePathname } from '../shared/utils/localize-pathname.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* redirect utility.
|
|
16
|
+
*
|
|
17
|
+
* - Wraps Next.js redirect and applies locale-aware navigation.
|
|
18
|
+
* - Automatically prefixes the pathname with the correct locale.
|
|
19
|
+
* - External URLs are redirected directly without modification.
|
|
20
|
+
*/
|
|
21
|
+
const redirect = async ({ config, locale, url, type, }) => {
|
|
22
|
+
if (url.startsWith("http")) {
|
|
23
|
+
redirect$1(url);
|
|
24
|
+
}
|
|
25
|
+
const isLocaleValid = locale && config.supportedLocales?.includes(locale);
|
|
26
|
+
const { locale: detectedLocale } = await getI18nContext(config);
|
|
27
|
+
// Generate the locale-prefixed pathname
|
|
28
|
+
const { localePrefixedPathname } = localizePathname({
|
|
29
|
+
config,
|
|
30
|
+
pathname: url,
|
|
31
|
+
locale: isLocaleValid ? locale : detectedLocale,
|
|
32
|
+
});
|
|
33
|
+
redirect$1(localePrefixedPathname, type);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { redirect };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom hook to get the current pathname in different forms based on the active locale.
|
|
3
|
+
*
|
|
4
|
+
* This hook wraps Next.js `usePathname` and processes the pathname according to the app's
|
|
5
|
+
* locale configuration.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const { localizedPathname, standardizedPathname, unprefixedPathname } = usePathname();
|
|
9
|
+
* console.log(localizedPathname); // e.g. "/en/about"
|
|
10
|
+
* console.log(standardizedPathname); // e.g. "/{locale}/about"
|
|
11
|
+
* console.log(unprefixedPathname); // e.g. "/about"
|
|
12
|
+
*/
|
|
13
|
+
export declare const usePathname: () => {
|
|
14
|
+
localizedPathname: string;
|
|
15
|
+
standardizedPathname: string;
|
|
16
|
+
unprefixedPathname: string;
|
|
17
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { usePathname as usePathname$1 } from 'next/navigation';
|
|
2
|
+
import { localizePathname } from '../shared/utils/localize-pathname.js';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '../../../client/react/contexts/config/context.js';
|
|
6
|
+
import { useConfig } from '../../../client/react/contexts/config/hook.js';
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
import '../../../config/constants/cache.constants.js';
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
import '../../../client/react/contexts/messages/context.js';
|
|
16
|
+
import '../../../client/react/contexts/locale/context.js';
|
|
17
|
+
import { useLocale } from '../../../client/react/contexts/locale/hook.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Custom hook to get the current pathname in different forms based on the active locale.
|
|
21
|
+
*
|
|
22
|
+
* This hook wraps Next.js `usePathname` and processes the pathname according to the app's
|
|
23
|
+
* locale configuration.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const { localizedPathname, standardizedPathname, unprefixedPathname } = usePathname();
|
|
27
|
+
* console.log(localizedPathname); // e.g. "/en/about"
|
|
28
|
+
* console.log(standardizedPathname); // e.g. "/{locale}/about"
|
|
29
|
+
* console.log(unprefixedPathname); // e.g. "/about"
|
|
30
|
+
*/
|
|
31
|
+
const usePathname = () => {
|
|
32
|
+
const { config } = useConfig();
|
|
33
|
+
const { locale } = useLocale();
|
|
34
|
+
// Get the raw pathname from the Next.js usePathname hook
|
|
35
|
+
const rawPathname = usePathname$1();
|
|
36
|
+
// Generate the locale-prefixed pathname
|
|
37
|
+
const { localePrefixedPathname, standardizedPathname, unprefixedPathname } = localizePathname({
|
|
38
|
+
config,
|
|
39
|
+
pathname: rawPathname,
|
|
40
|
+
locale,
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
localizedPathname: localePrefixedPathname,
|
|
44
|
+
standardizedPathname,
|
|
45
|
+
unprefixedPathname,
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export { usePathname };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { GenLocale } from "../../../shared/types/generated.types";
|
|
2
|
+
import type { Locale } from "intor-translator";
|
|
3
|
+
import type { NavigateOptions } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
|
4
|
+
/**
|
|
5
|
+
* useRouter hook.
|
|
6
|
+
*
|
|
7
|
+
* Wraps Next.js useRouter and provides push/replace methods that automatically switch locale.
|
|
8
|
+
*/
|
|
9
|
+
export declare const useRouter: () => {
|
|
10
|
+
back(): void;
|
|
11
|
+
forward(): void;
|
|
12
|
+
refresh(): void;
|
|
13
|
+
prefetch(href: string, options?: import("next/dist/shared/lib/app-router-context.shared-runtime").PrefetchOptions): void;
|
|
14
|
+
push: (href: string, options?: NavigateOptions & {
|
|
15
|
+
locale?: GenLocale;
|
|
16
|
+
}) => void;
|
|
17
|
+
replace: (href: string, options?: NavigateOptions & {
|
|
18
|
+
locale?: Locale;
|
|
19
|
+
}) => void;
|
|
20
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useRouter as useRouter$1 } from 'next/navigation';
|
|
2
|
+
import { useLocaleSwitch } from './utils/use-locale-switch.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* useRouter hook.
|
|
6
|
+
*
|
|
7
|
+
* Wraps Next.js useRouter and provides push/replace methods that automatically switch locale.
|
|
8
|
+
*/
|
|
9
|
+
const useRouter = () => {
|
|
10
|
+
const { push, replace, ...rest } = useRouter$1();
|
|
11
|
+
const { switchLocale } = useLocaleSwitch();
|
|
12
|
+
// Push with locale
|
|
13
|
+
const pushWithLocale = (href, options) => {
|
|
14
|
+
const resolvedHref = switchLocale({ href, locale: options?.locale });
|
|
15
|
+
if (resolvedHref)
|
|
16
|
+
push(resolvedHref, options);
|
|
17
|
+
};
|
|
18
|
+
// Replace with locale
|
|
19
|
+
const replaceWithLocale = (href, options) => {
|
|
20
|
+
const resolvedHref = switchLocale({ href, locale: options?.locale });
|
|
21
|
+
if (resolvedHref)
|
|
22
|
+
replace(resolvedHref, options);
|
|
23
|
+
};
|
|
24
|
+
return {
|
|
25
|
+
push: pushWithLocale,
|
|
26
|
+
replace: replaceWithLocale,
|
|
27
|
+
...rest,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { useRouter };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../../config";
|
|
2
|
+
export declare const shouldFullReload: ({ config, targetPathname, locale, currentLocale, }: {
|
|
3
|
+
config: IntorResolvedConfig;
|
|
4
|
+
targetPathname: string;
|
|
5
|
+
locale?: string;
|
|
6
|
+
currentLocale: string;
|
|
7
|
+
}) => boolean;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
import { extractPathname } from '../../../../shared/utils/pathname/extract-pathname.js';
|
|
3
|
+
|
|
4
|
+
const shouldFullReload = ({ config, targetPathname, locale, currentLocale, }) => {
|
|
5
|
+
const loader = config.loader;
|
|
6
|
+
if (!loader || !loader.type)
|
|
7
|
+
return false;
|
|
8
|
+
if (loader.type === "remote" && !loader.fullReload)
|
|
9
|
+
return false;
|
|
10
|
+
const { maybeLocale, isLocalePrefixed } = extractPathname({
|
|
11
|
+
config,
|
|
12
|
+
pathname: targetPathname,
|
|
13
|
+
});
|
|
14
|
+
const isDifferentLocale = (locale && locale !== currentLocale) ||
|
|
15
|
+
(isLocalePrefixed && maybeLocale !== currentLocale);
|
|
16
|
+
return isDifferentLocale ? true : false;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { shouldFullReload };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Locale } from "intor-translator";
|
|
2
|
+
export declare const useLocaleSwitch: () => {
|
|
3
|
+
resolveHref: ({ href, locale, }: {
|
|
4
|
+
href?: string;
|
|
5
|
+
locale?: Locale;
|
|
6
|
+
}) => {
|
|
7
|
+
resolvedHref: string;
|
|
8
|
+
isExternal: boolean;
|
|
9
|
+
targetLocale: string;
|
|
10
|
+
targetPathname: string;
|
|
11
|
+
};
|
|
12
|
+
switchLocale: ({ href, locale, }: {
|
|
13
|
+
href?: string;
|
|
14
|
+
locale?: Locale;
|
|
15
|
+
}) => string | undefined;
|
|
16
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { usePathname } from '../use-pathname.js';
|
|
2
|
+
import { shouldFullReload } from './should-full-reload.js';
|
|
3
|
+
import { localizePathname } from '../../shared/utils/localize-pathname.js';
|
|
4
|
+
import 'react/jsx-runtime';
|
|
5
|
+
import 'react';
|
|
6
|
+
import '../../../../client/react/contexts/config/context.js';
|
|
7
|
+
import { useConfig } from '../../../../client/react/contexts/config/hook.js';
|
|
8
|
+
import { setLocaleCookieBrowser } from '../../../../shared/utils/client/set-locale-cookie-browser.js';
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
import '../../../../config/constants/cache.constants.js';
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
import '../../../../client/react/contexts/messages/context.js';
|
|
18
|
+
import '../../../../client/react/contexts/locale/context.js';
|
|
19
|
+
import { useLocale } from '../../../../client/react/contexts/locale/hook.js';
|
|
20
|
+
|
|
21
|
+
const useLocaleSwitch = () => {
|
|
22
|
+
const { config } = useConfig();
|
|
23
|
+
const { locale: currentLocale, setLocale } = useLocale();
|
|
24
|
+
const { localizedPathname } = usePathname();
|
|
25
|
+
// Resolve href
|
|
26
|
+
const resolveHref = ({ href, locale, }) => {
|
|
27
|
+
const isLocaleValid = locale && config.supportedLocales?.includes(locale);
|
|
28
|
+
const targetLocale = isLocaleValid ? locale : currentLocale;
|
|
29
|
+
const targetPathname = href ?? localizedPathname;
|
|
30
|
+
const isExternal = targetPathname.startsWith("http");
|
|
31
|
+
const resolvedHref = !isExternal
|
|
32
|
+
? localizePathname({
|
|
33
|
+
config,
|
|
34
|
+
pathname: targetPathname,
|
|
35
|
+
locale: targetLocale,
|
|
36
|
+
}).localePrefixedPathname
|
|
37
|
+
: targetPathname;
|
|
38
|
+
return { resolvedHref, isExternal, targetLocale, targetPathname };
|
|
39
|
+
};
|
|
40
|
+
// Switch locale
|
|
41
|
+
const switchLocale = ({ href, locale, }) => {
|
|
42
|
+
const { resolvedHref, isExternal, targetLocale, targetPathname } = resolveHref({ href, locale });
|
|
43
|
+
if (isExternal)
|
|
44
|
+
return;
|
|
45
|
+
if (shouldFullReload({ config, targetPathname, locale, currentLocale })) {
|
|
46
|
+
setLocaleCookieBrowser({ cookie: config.cookie, locale: targetLocale });
|
|
47
|
+
globalThis.location.href = resolvedHref; // Full reload navigation
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
setLocale(targetLocale);
|
|
52
|
+
}
|
|
53
|
+
return resolvedHref;
|
|
54
|
+
};
|
|
55
|
+
return { resolveHref, switchLocale };
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export { useLocaleSwitch };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../../config";
|
|
2
|
+
import type { NextRequest } from "next/server";
|
|
3
|
+
/**
|
|
4
|
+
* Handle routing for "all" prefix.
|
|
5
|
+
*
|
|
6
|
+
* - If URL has locale prefix → use it and override cookie.
|
|
7
|
+
* - If no prefix and no cookie:
|
|
8
|
+
* - If redirect disabled → respond directly.
|
|
9
|
+
* - If redirect enabled → detect initial locale and redirect.
|
|
10
|
+
* - If no prefix but cookie exists → redirect using cookie locale.
|
|
11
|
+
*/
|
|
12
|
+
export declare const handlePrefixAll: <Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req) => Promise<Response>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createResponse } from '../utils/create-response.js';
|
|
2
|
+
import { determineInitialLocale } from '../utils/determine-initial-locale.js';
|
|
3
|
+
import 'lodash.merge';
|
|
4
|
+
import { extractPathname } from '../../../../shared/utils/pathname/extract-pathname.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Handle routing for "all" prefix.
|
|
8
|
+
*
|
|
9
|
+
* - If URL has locale prefix → use it and override cookie.
|
|
10
|
+
* - If no prefix and no cookie:
|
|
11
|
+
* - If redirect disabled → respond directly.
|
|
12
|
+
* - If redirect enabled → detect initial locale and redirect.
|
|
13
|
+
* - If no prefix but cookie exists → redirect using cookie locale.
|
|
14
|
+
*/
|
|
15
|
+
const handlePrefixAll = async (config, request) => {
|
|
16
|
+
const { cookie, routing } = config;
|
|
17
|
+
const { maybeLocale, isLocalePrefixed } = extractPathname({
|
|
18
|
+
config,
|
|
19
|
+
pathname: request.nextUrl.pathname,
|
|
20
|
+
});
|
|
21
|
+
const localeFromCookie = request.cookies.get(cookie.name)?.value;
|
|
22
|
+
// ▼ URL has a locale prefix, (e.g. https://example.com/en)
|
|
23
|
+
if (isLocalePrefixed) {
|
|
24
|
+
// ▶ Go directly and override cookie
|
|
25
|
+
return createResponse({
|
|
26
|
+
request,
|
|
27
|
+
config,
|
|
28
|
+
locale: maybeLocale,
|
|
29
|
+
setCookieOptions: { override: true },
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
// ▼ URL doesn't have a locale prefix, (e.g. https://example.com/)
|
|
33
|
+
// No cookie, so is first visit
|
|
34
|
+
if (!localeFromCookie) {
|
|
35
|
+
// Not using redirect (Do not set cookie)
|
|
36
|
+
if (!routing.firstVisit.redirect) {
|
|
37
|
+
// ▶ Go directly
|
|
38
|
+
return createResponse({ request, config });
|
|
39
|
+
}
|
|
40
|
+
// Decide to use locale from browser or defaultLocale
|
|
41
|
+
const initialLocale = await determineInitialLocale(config);
|
|
42
|
+
// Using redirect for the first visit
|
|
43
|
+
// ▶ Redirect to URL (set cookie for the first visit)
|
|
44
|
+
return createResponse({
|
|
45
|
+
request,
|
|
46
|
+
config,
|
|
47
|
+
locale: initialLocale, // Use locale from 'browser' | 'default'
|
|
48
|
+
responseType: "redirect",
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// ▶ Redirect to URL
|
|
52
|
+
return createResponse({
|
|
53
|
+
request,
|
|
54
|
+
config,
|
|
55
|
+
locale: localeFromCookie, // Use locale from cookie
|
|
56
|
+
responseType: "redirect",
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export { handlePrefixAll };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../../config";
|
|
2
|
+
import type { NextRequest } from "next/server";
|
|
3
|
+
/**
|
|
4
|
+
* Handle routing for "except-default" prefix.
|
|
5
|
+
*
|
|
6
|
+
* - If URL has a non-default locale prefix → use it and override cookie.
|
|
7
|
+
* - If no prefix and no cookie:
|
|
8
|
+
* - If redirect disabled → respond directly.
|
|
9
|
+
* - If redirect enabled:
|
|
10
|
+
* - If resolved locale is default → respond directly.
|
|
11
|
+
* - Else → redirect to locale URL.
|
|
12
|
+
* - If no prefix but cookie exists:
|
|
13
|
+
* - If cookie locale is default → respond directly.
|
|
14
|
+
* - Else → redirect to locale URL.
|
|
15
|
+
*/
|
|
16
|
+
export declare const handlePrefixExceptDefault: <Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req) => Promise<Response>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { createResponse } from '../utils/create-response.js';
|
|
2
|
+
import { determineInitialLocale } from '../utils/determine-initial-locale.js';
|
|
3
|
+
import 'lodash.merge';
|
|
4
|
+
import { extractPathname } from '../../../../shared/utils/pathname/extract-pathname.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Handle routing for "except-default" prefix.
|
|
8
|
+
*
|
|
9
|
+
* - If URL has a non-default locale prefix → use it and override cookie.
|
|
10
|
+
* - If no prefix and no cookie:
|
|
11
|
+
* - If redirect disabled → respond directly.
|
|
12
|
+
* - If redirect enabled:
|
|
13
|
+
* - If resolved locale is default → respond directly.
|
|
14
|
+
* - Else → redirect to locale URL.
|
|
15
|
+
* - If no prefix but cookie exists:
|
|
16
|
+
* - If cookie locale is default → respond directly.
|
|
17
|
+
* - Else → redirect to locale URL.
|
|
18
|
+
*/
|
|
19
|
+
const handlePrefixExceptDefault = async (config, request) => {
|
|
20
|
+
const { defaultLocale, cookie, routing } = config;
|
|
21
|
+
const { maybeLocale, isLocalePrefixed } = extractPathname({
|
|
22
|
+
config,
|
|
23
|
+
pathname: request.nextUrl.pathname,
|
|
24
|
+
});
|
|
25
|
+
const localeFromCookie = request.cookies.get(cookie.name)?.value;
|
|
26
|
+
// ▼ URL has a locale prefix, and it's not defaultLocale (e.g. https://example.com/zh)
|
|
27
|
+
if (isLocalePrefixed && maybeLocale !== defaultLocale) {
|
|
28
|
+
// ▶ Go directly and override cookie
|
|
29
|
+
return createResponse({
|
|
30
|
+
request,
|
|
31
|
+
config,
|
|
32
|
+
locale: maybeLocale,
|
|
33
|
+
setCookieOptions: { override: true },
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
// ▼ URL doesn't have a locale prefix, (e.g. https://example.com/)
|
|
37
|
+
// No cookie, so is first visit
|
|
38
|
+
if (!localeFromCookie) {
|
|
39
|
+
// Not using redirect (Do not set cookie)
|
|
40
|
+
if (!routing.firstVisit.redirect) {
|
|
41
|
+
// ▶ Go directly
|
|
42
|
+
return createResponse({ request, config });
|
|
43
|
+
}
|
|
44
|
+
// Using redirect for the first visit
|
|
45
|
+
// Decide to use locale from browser or defaultLocale
|
|
46
|
+
const initialLocale = await determineInitialLocale(config);
|
|
47
|
+
const isDefaultLocale = initialLocale === defaultLocale;
|
|
48
|
+
// Is defaultLocale
|
|
49
|
+
if (isDefaultLocale) {
|
|
50
|
+
// ▶ Go directly, no prefix (set cookie for the first visit)
|
|
51
|
+
return createResponse({
|
|
52
|
+
request,
|
|
53
|
+
config,
|
|
54
|
+
locale: defaultLocale,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// Not defaultLocale
|
|
58
|
+
// ▶ Redirect to URL (set cookie for the first visit)
|
|
59
|
+
return createResponse({
|
|
60
|
+
request,
|
|
61
|
+
config,
|
|
62
|
+
locale: initialLocale, // Use locale from 'browser' | 'default'
|
|
63
|
+
responseType: "redirect",
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Cookie found (No need to set cookie)
|
|
67
|
+
const isDefaultLocale = localeFromCookie === defaultLocale;
|
|
68
|
+
if (isDefaultLocale) {
|
|
69
|
+
// ▶ Go directly
|
|
70
|
+
return createResponse({ request, config, locale: localeFromCookie });
|
|
71
|
+
}
|
|
72
|
+
// ▶ Redirect to URL
|
|
73
|
+
return createResponse({
|
|
74
|
+
request,
|
|
75
|
+
config,
|
|
76
|
+
locale: localeFromCookie, // Use locale from cookie
|
|
77
|
+
responseType: "redirect",
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export { handlePrefixExceptDefault };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../../config";
|
|
2
|
+
import type { NextRequest } from "next/server";
|
|
3
|
+
/**
|
|
4
|
+
* Handle routing for "none" prefix.
|
|
5
|
+
*
|
|
6
|
+
* Checks cookie for locale. If absent,
|
|
7
|
+
* determines initial locale via config.
|
|
8
|
+
* Returns response with locale.
|
|
9
|
+
*/
|
|
10
|
+
export declare const handlePrefixNone: <Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req) => Promise<Response>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createResponse } from '../utils/create-response.js';
|
|
2
|
+
import { determineInitialLocale } from '../utils/determine-initial-locale.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Handle routing for "none" prefix.
|
|
6
|
+
*
|
|
7
|
+
* Checks cookie for locale. If absent,
|
|
8
|
+
* determines initial locale via config.
|
|
9
|
+
* Returns response with locale.
|
|
10
|
+
*/
|
|
11
|
+
const handlePrefixNone = async (config, request) => {
|
|
12
|
+
let locale = request.cookies.get(config.cookie.name)?.value;
|
|
13
|
+
// No cookie, so is first visit
|
|
14
|
+
if (!locale) {
|
|
15
|
+
// Decide to use locale from browser or defaultLocale
|
|
16
|
+
locale = await determineInitialLocale(config);
|
|
17
|
+
}
|
|
18
|
+
// ▶ Go directly (set cookie only for the first time, no override)
|
|
19
|
+
return createResponse({ request, config, locale });
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { handlePrefixNone };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../config/types/intor-config.types";
|
|
2
|
+
import type { NextRequest } from "next/server";
|
|
3
|
+
/**
|
|
4
|
+
* Handle locale routing based on prefix config
|
|
5
|
+
*/
|
|
6
|
+
export declare function intorProxy<Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req): Promise<Response>;
|