intor 2.3.2 → 2.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/export/config/index.d.ts +1 -0
- package/dist/export/config/index.js +1 -0
- package/dist/export/index.d.ts +4 -0
- package/dist/export/index.js +4 -0
- package/dist/export/internal/index.d.ts +1 -0
- package/dist/export/next/index.d.ts +1 -0
- package/dist/export/next/index.js +4 -0
- package/dist/export/next/proxy/index.d.ts +1 -0
- package/dist/{exports → export}/next/proxy/index.js +0 -1
- package/dist/export/next/server/index.d.ts +1 -0
- package/dist/export/next/server/index.js +2 -0
- package/dist/export/react/index.d.ts +1 -0
- package/dist/export/react/index.js +10 -0
- package/dist/export/server/index.d.ts +1 -0
- package/dist/export/server/index.js +7 -0
- package/dist/src/adapters/next/navigation/link.d.ts +17 -7
- package/dist/src/adapters/next/navigation/link.js +35 -9
- package/dist/src/adapters/next/navigation/redirect.d.ts +10 -8
- package/dist/src/adapters/next/navigation/redirect.js +19 -18
- package/dist/src/adapters/next/navigation/use-pathname.d.ts +5 -5
- package/dist/src/adapters/next/navigation/use-pathname.js +7 -20
- package/dist/src/adapters/next/navigation/use-router.d.ts +15 -10
- package/dist/src/adapters/next/navigation/use-router.js +51 -17
- package/dist/src/adapters/next/proxy/index.d.ts +0 -1
- package/dist/src/adapters/next/proxy/intor-proxy.d.ts +10 -3
- package/dist/src/adapters/next/proxy/intor-proxy.js +38 -16
- package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.d.ts +2 -4
- package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.js +2 -7
- package/dist/src/adapters/next/server/get-locale.d.ts +6 -0
- package/dist/src/adapters/next/server/get-locale.js +25 -0
- package/dist/src/adapters/next/server/get-translator.d.ts +7 -5
- package/dist/src/adapters/next/server/get-translator.js +4 -4
- package/dist/src/adapters/next/server/index.d.ts +1 -1
- package/dist/src/client/helpers/get-client-locale.d.ts +11 -0
- package/dist/src/client/helpers/get-client-locale.js +24 -0
- package/dist/src/client/helpers/index.d.ts +1 -0
- package/dist/src/client/react/contexts/config/context.js +0 -1
- package/dist/src/client/react/contexts/config/hook.js +0 -1
- package/dist/src/client/react/contexts/config/provider.d.ts +1 -1
- package/dist/src/client/react/contexts/config/provider.js +5 -2
- package/dist/src/client/react/contexts/config/types.d.ts +6 -5
- package/dist/src/client/react/contexts/intor-provider/intor-provider.d.ts +1 -1
- package/dist/src/client/react/contexts/intor-provider/intor-provider.js +3 -3
- package/dist/src/client/react/contexts/intor-provider/types.d.ts +1 -2
- package/dist/src/client/react/contexts/locale/context.js +0 -1
- package/dist/src/client/react/contexts/locale/hook.js +0 -1
- package/dist/src/client/react/contexts/locale/provider.js +16 -26
- package/dist/src/client/react/contexts/locale/types.d.ts +4 -4
- package/dist/src/client/react/contexts/locale/utils/change-locale.d.ts +14 -16
- package/dist/src/client/react/contexts/locale/utils/change-locale.js +18 -27
- package/dist/src/client/react/contexts/messages/context.js +1 -4
- package/dist/src/client/react/contexts/messages/hook.js +0 -1
- package/dist/src/client/react/contexts/messages/provider.js +18 -11
- package/dist/src/client/react/contexts/messages/types.d.ts +4 -7
- package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.d.ts +10 -6
- package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.js +44 -31
- package/dist/src/client/react/contexts/translator/context.js +1 -4
- package/dist/src/client/react/contexts/translator/hook.d.ts +1 -2
- package/dist/src/client/react/contexts/translator/hook.js +0 -1
- package/dist/src/client/react/contexts/translator/provider.js +21 -24
- package/dist/src/client/react/contexts/translator/types.d.ts +5 -5
- package/dist/src/client/react/contexts/translator-runtime/context.d.ts +3 -0
- package/dist/src/client/react/contexts/translator-runtime/context.js +3 -0
- package/dist/src/client/react/contexts/translator-runtime/hook.d.ts +2 -0
- package/dist/src/client/react/contexts/translator-runtime/hook.js +9 -0
- package/dist/src/client/react/contexts/translator-runtime/index.d.ts +3 -0
- package/dist/src/client/react/contexts/translator-runtime/provider.d.ts +2 -0
- package/dist/src/client/react/contexts/translator-runtime/provider.js +15 -0
- package/dist/src/client/react/contexts/translator-runtime/types.d.ts +13 -0
- package/dist/src/client/react/index.d.ts +4 -3
- package/dist/src/client/react/navigation/index.d.ts +2 -0
- package/dist/src/client/react/navigation/use-navigation-strategy.d.ts +22 -0
- package/dist/src/client/react/navigation/use-navigation-strategy.js +37 -0
- package/dist/src/client/react/navigation/use-navigation-target.d.ts +12 -0
- package/dist/src/client/react/navigation/use-navigation-target.js +27 -0
- package/dist/src/client/react/{hooks → translator}/use-translator.d.ts +4 -4
- package/dist/src/client/react/{hooks → translator}/use-translator.js +4 -9
- package/dist/src/client/shared/utils/build-cookie-string.d.ts +5 -0
- package/dist/src/client/shared/utils/build-cookie-string.js +30 -0
- package/dist/src/client/shared/utils/index.d.ts +1 -0
- package/dist/src/client/shared/utils/locale/detect-browser-locale.d.ts +6 -0
- package/dist/src/client/shared/utils/locale/detect-browser-locale.js +12 -0
- package/dist/src/client/shared/utils/locale/get-locale-cookie-browser.d.ts +6 -0
- package/dist/src/client/shared/utils/locale/get-locale-cookie-browser.js +16 -0
- package/dist/src/client/shared/utils/locale/index.d.ts +4 -0
- package/dist/src/client/shared/utils/locale/set-document-locale.d.ts +6 -0
- package/dist/src/client/shared/utils/locale/set-document-locale.js +12 -0
- package/dist/src/client/shared/utils/locale/set-locale-cookie-browser.d.ts +7 -0
- package/dist/src/client/shared/utils/locale/set-locale-cookie-browser.js +18 -0
- package/dist/src/config/constants/cookie.constants.js +2 -2
- package/dist/src/config/constants/routing.constants.js +6 -0
- package/dist/src/config/define-intor-config.d.ts +16 -0
- package/dist/src/config/define-intor-config.js +18 -4
- package/dist/src/config/index.d.ts +0 -3
- package/dist/src/config/resolvers/resolve-cookie-options.d.ts +0 -9
- package/dist/src/config/resolvers/resolve-cookie-options.js +0 -9
- package/dist/src/config/resolvers/resolve-fallback-locales.d.ts +18 -1
- package/dist/src/config/resolvers/resolve-fallback-locales.js +17 -0
- package/dist/src/config/resolvers/resolve-routing-options.d.ts +0 -11
- package/dist/src/config/resolvers/resolve-routing-options.js +5 -13
- package/dist/src/config/types/cache.types.d.ts +2 -2
- package/dist/src/config/types/cookie.types.d.ts +10 -10
- package/dist/src/config/types/intor-config.types.d.ts +2 -0
- package/dist/src/config/types/loader.types.d.ts +15 -19
- package/dist/src/config/types/logger.types.d.ts +7 -5
- package/dist/src/config/types/routing.types.d.ts +33 -9
- package/dist/src/config/types/translator.types.d.ts +5 -2
- package/dist/src/config/validators/validate-default-locale.d.ts +9 -0
- package/dist/src/config/validators/validate-default-locale.js +9 -0
- package/dist/src/config/validators/validate-supported-locales.d.ts +8 -3
- package/dist/src/config/validators/validate-supported-locales.js +8 -3
- package/dist/src/routing/index.d.ts +1 -0
- package/dist/src/routing/locale/index.d.ts +1 -0
- package/dist/src/routing/locale/resolve-locale.d.ts +16 -0
- package/dist/src/routing/locale/resolve-locale.js +32 -0
- package/dist/src/routing/locale/types.d.ts +36 -0
- package/dist/src/routing/pathname/index.d.ts +1 -0
- package/dist/src/routing/pathname/resolve-pathname.d.ts +19 -0
- package/dist/src/routing/pathname/resolve-pathname.js +53 -0
- package/dist/src/routing/pathname/strategies/all.d.ts +6 -0
- package/dist/src/routing/pathname/strategies/all.js +23 -0
- package/dist/src/routing/pathname/strategies/except-default.d.ts +6 -0
- package/dist/src/routing/pathname/strategies/except-default.js +33 -0
- package/dist/src/routing/pathname/strategies/index.d.ts +3 -0
- package/dist/src/routing/pathname/strategies/none.d.ts +5 -0
- package/dist/src/routing/pathname/strategies/none.js +14 -0
- package/dist/src/routing/pathname/types.d.ts +28 -0
- package/dist/src/routing/resolve-navigation-target.d.ts +20 -0
- package/dist/src/routing/resolve-navigation-target.js +28 -0
- package/dist/src/routing/resolve-routing.d.ts +30 -0
- package/dist/src/routing/resolve-routing.js +38 -0
- package/dist/src/server/helpers/index.d.ts +1 -0
- package/dist/src/server/helpers/local-messages-from-url.d.ts +21 -0
- package/dist/src/server/helpers/local-messages-from-url.js +48 -0
- package/dist/src/server/index.d.ts +4 -2
- package/dist/src/server/intor/index.d.ts +1 -1
- package/dist/src/server/intor/intor.d.ts +12 -6
- package/dist/src/server/intor/intor.js +21 -39
- package/dist/src/server/intor/types.d.ts +5 -10
- package/dist/src/server/messages/index.d.ts +1 -5
- package/dist/src/server/messages/load-local-messages/index.d.ts +1 -1
- package/dist/src/server/messages/load-local-messages/load-local-messages.d.ts +11 -7
- package/dist/src/server/messages/load-local-messages/load-local-messages.js +46 -38
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.d.ts +5 -14
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +12 -29
- package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/types.d.ts +1 -1
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.d.ts +2 -2
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +8 -5
- package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/types.d.ts +1 -1
- package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.d.ts +2 -2
- package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +3 -3
- package/dist/src/server/messages/load-local-messages/read-locale-messages/types.d.ts +1 -1
- package/dist/src/server/messages/load-local-messages/types.d.ts +12 -11
- package/dist/src/server/messages/load-messages.d.ts +10 -7
- package/dist/src/server/messages/load-messages.js +21 -21
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.d.ts +1 -1
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +6 -1
- package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/types.d.ts +1 -0
- package/dist/src/server/messages/load-remote-messages/index.d.ts +1 -1
- package/dist/src/server/messages/load-remote-messages/load-remote-messages.d.ts +10 -4
- package/dist/src/server/messages/load-remote-messages/load-remote-messages.js +65 -34
- package/dist/src/server/messages/load-remote-messages/types.d.ts +4 -3
- package/dist/src/server/messages/types.d.ts +2 -3
- package/dist/src/server/shared/logger/get-logger.d.ts +1 -1
- package/dist/src/server/shared/logger/get-logger.js +10 -5
- package/dist/src/server/translator/get-translator.d.ts +9 -9
- package/dist/src/server/translator/get-translator.js +6 -10
- package/dist/src/shared/constants/index.d.ts +1 -0
- package/dist/src/shared/error/intor-error.d.ts +4 -4
- package/dist/src/shared/types/generated.d.ts +53 -0
- package/dist/src/shared/types/index.d.ts +2 -0
- package/dist/src/shared/types/routing.d.ts +6 -0
- package/dist/src/shared/types/{translator-instance.types.d.ts → translator-instance.d.ts} +17 -19
- package/dist/src/shared/utils/deep-merge.d.ts +8 -0
- package/dist/src/shared/utils/deep-merge.js +36 -0
- package/dist/src/shared/utils/index.d.ts +4 -8
- package/dist/src/shared/utils/is-external-destination.d.ts +7 -0
- package/dist/src/shared/utils/is-external-destination.js +11 -0
- package/dist/src/shared/utils/locale/get-locale-from-accept-language.d.ts +19 -0
- package/dist/src/shared/utils/locale/get-locale-from-accept-language.js +45 -0
- package/dist/src/shared/utils/locale/get-locale-from-host.d.ts +17 -0
- package/dist/src/shared/utils/locale/get-locale-from-host.js +31 -0
- package/dist/src/shared/utils/locale/get-locale-from-pathname.d.ts +31 -0
- package/dist/src/shared/utils/locale/get-locale-from-pathname.js +52 -0
- package/dist/src/shared/utils/locale/get-locale-from-query.d.ts +20 -0
- package/dist/src/shared/utils/locale/get-locale-from-query.js +33 -0
- package/dist/src/shared/utils/locale/index.d.ts +4 -0
- package/dist/src/shared/utils/normalizers/index.d.ts +3 -0
- package/dist/src/shared/utils/normalizers/normalize-cache-key.d.ts +14 -0
- package/dist/src/shared/utils/{normalize-cache-key.js → normalizers/normalize-cache-key.js} +17 -1
- package/dist/src/shared/utils/normalizers/normalize-locale.d.ts +22 -0
- package/dist/src/shared/utils/{locale → normalizers}/normalize-locale.js +21 -4
- package/dist/src/shared/utils/{pathname → normalizers}/normalize-pathname.d.ts +1 -1
- package/dist/src/shared/utils/{pathname → normalizers}/normalize-pathname.js +1 -1
- package/dist/src/shared/utils/pathname/get-unprefixed-pathname.d.ts +14 -0
- package/dist/src/shared/utils/pathname/get-unprefixed-pathname.js +39 -0
- package/dist/src/shared/utils/pathname/index.d.ts +1 -0
- package/dist/src/shared/utils/pathname/locale-prefix-pathname.d.ts +16 -0
- package/dist/src/{adapters/next/shared/utils → shared/utils/pathname}/locale-prefix-pathname.js +17 -12
- package/dist/src/shared/utils/pathname/localize-pathname.d.ts +23 -0
- package/dist/src/shared/utils/pathname/localize-pathname.js +36 -0
- package/dist/src/shared/utils/pathname/standardize-pathname.d.ts +6 -11
- package/dist/src/shared/utils/pathname/standardize-pathname.js +8 -8
- package/package.json +74 -65
- package/dist/exports/config/index.d.ts +0 -2
- package/dist/exports/config/index.js +0 -4
- package/dist/exports/index.d.ts +0 -5
- package/dist/exports/index.js +0 -11
- package/dist/exports/next/index.d.ts +0 -3
- package/dist/exports/next/index.js +0 -9
- package/dist/exports/next/proxy/index.d.ts +0 -2
- package/dist/exports/next/server/index.d.ts +0 -2
- package/dist/exports/next/server/index.js +0 -2
- package/dist/exports/react/index.d.ts +0 -2
- package/dist/exports/react/index.js +0 -6
- package/dist/exports/server/index.d.ts +0 -2
- package/dist/exports/server/index.js +0 -7
- package/dist/src/adapters/next/navigation/utils/should-full-reload.d.ts +0 -7
- package/dist/src/adapters/next/navigation/utils/should-full-reload.js +0 -19
- package/dist/src/adapters/next/navigation/utils/use-locale-switch.d.ts +0 -16
- package/dist/src/adapters/next/navigation/utils/use-locale-switch.js +0 -58
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.d.ts +0 -12
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.js +0 -60
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.d.ts +0 -16
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.js +0 -81
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.d.ts +0 -10
- package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.js +0 -22
- package/dist/src/adapters/next/proxy/utils/create-response.d.ts +0 -17
- package/dist/src/adapters/next/proxy/utils/create-response.js +0 -42
- package/dist/src/adapters/next/proxy/utils/determine-initial-locale.d.ts +0 -8
- package/dist/src/adapters/next/proxy/utils/determine-initial-locale.js +0 -28
- package/dist/src/adapters/next/proxy/utils/set-pathname-header.d.ts +0 -12
- package/dist/src/adapters/next/proxy/utils/set-pathname-header.js +0 -13
- package/dist/src/adapters/next/server/get-i18n-context.d.ts +0 -9
- package/dist/src/adapters/next/server/get-i18n-context.js +0 -47
- package/dist/src/adapters/next/shared/constants/pathname-header-name.d.ts +0 -1
- package/dist/src/adapters/next/shared/constants/pathname-header-name.js +0 -4
- package/dist/src/adapters/next/shared/utils/locale-prefix-pathname.d.ts +0 -16
- package/dist/src/adapters/next/shared/utils/localize-pathname.d.ts +0 -18
- package/dist/src/adapters/next/shared/utils/localize-pathname.js +0 -36
- package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.d.ts +0 -8
- package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.js +0 -28
- package/dist/src/client/react/contexts/translate-handlers/context.d.ts +0 -2
- package/dist/src/client/react/contexts/translate-handlers/context.js +0 -6
- package/dist/src/client/react/contexts/translate-handlers/hook.d.ts +0 -2
- package/dist/src/client/react/contexts/translate-handlers/hook.js +0 -10
- package/dist/src/client/react/contexts/translate-handlers/index.d.ts +0 -3
- package/dist/src/client/react/contexts/translate-handlers/provider.d.ts +0 -2
- package/dist/src/client/react/contexts/translate-handlers/provider.js +0 -11
- package/dist/src/client/react/contexts/translate-handlers/types.d.ts +0 -7
- package/dist/src/client/shared/utils/get-initial-locale.d.ts +0 -11
- package/dist/src/client/shared/utils/get-initial-locale.js +0 -21
- package/dist/src/shared/types/generated.types.d.ts +0 -30
- package/dist/src/shared/utils/client/build-cookie-string.d.ts +0 -9
- package/dist/src/shared/utils/client/build-cookie-string.js +0 -33
- package/dist/src/shared/utils/client/set-locale-cookie-browser.d.ts +0 -13
- package/dist/src/shared/utils/client/set-locale-cookie-browser.js +0 -21
- package/dist/src/shared/utils/locale/normalize-locale.d.ts +0 -4
- package/dist/src/shared/utils/locale/resolve-preferred-locale.d.ts +0 -5
- package/dist/src/shared/utils/locale/resolve-preferred-locale.js +0 -26
- package/dist/src/shared/utils/merge-messages.d.ts +0 -6
- package/dist/src/shared/utils/merge-messages.js +0 -13
- package/dist/src/shared/utils/normalize-cache-key.d.ts +0 -3
- package/dist/src/shared/utils/pathname/extract-pathname.d.ts +0 -28
- package/dist/src/shared/utils/pathname/extract-pathname.js +0 -58
- package/dist/src/shared/utils/resolve-namespaces.d.ts +0 -10
- package/dist/src/shared/utils/resolve-namespaces.js +0 -33
- /package/dist/src/server/{messages/shared → shared/messages}/global-messages-pool.d.ts +0 -0
- /package/dist/src/server/{messages/shared → shared/messages}/global-messages-pool.js +0 -0
package/README.md
CHANGED
|
@@ -21,3 +21,13 @@ Fast to start, easy to extend, and free from the usual i18n heaviness.
|
|
|
21
21
|
#### 🍳 Cooking the Intor v2 docs, crafting them to perfection...
|
|
22
22
|
|
|
23
23
|
</div>
|
|
24
|
+
|
|
25
|
+
#### load-messages
|
|
26
|
+
|
|
27
|
+
```plain
|
|
28
|
+
|
|
29
|
+
[load-messages]
|
|
30
|
+
|-> load-local-messages -> read-locale-messages -> collect-file-entries & parse-file-entries
|
|
31
|
+
|-> load-remote-messages -> fetchLocaleMessages
|
|
32
|
+
|
|
33
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { defineIntorConfig, type IntorRawConfig, type IntorResolvedConfig, } from "../../src/config";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { defineIntorConfig } from '../../src/config/define-intor-config.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { PREFIX_PLACEHOLDER } from "../src/shared/constants";
|
|
2
|
+
export { localizePathname, } from "../src/shared/utils";
|
|
3
|
+
export { IntorError, IntorErrorCode } from "../src/shared/error";
|
|
4
|
+
export { type TranslatorPlugin, type TranslateHandlers, type FormatHandler, type LoadingHandler, type MissingHandler, type HandlerContext, type TranslateContext, type TranslateHook, type LocaleMessages, } from "intor-translator";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { PREFIX_PLACEHOLDER } from '../src/shared/constants/prefix-placeholder.js';
|
|
2
|
+
export { localizePathname } from '../src/shared/utils/pathname/localize-pathname.js';
|
|
3
|
+
export { IntorError, IntorErrorCode } from '../src/shared/error/intor-error.js';
|
|
4
|
+
import 'intor-translator';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { INTOR_GENERATED_KEY, GenConfigKeys, GenConfig, GenMessages, GenLocale, Key, TranslatorInstance, TranslatorInstanceClient, } from "../../src/shared/types";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Link, usePathname, useRouter, redirect, } from "../../src/adapters/next/navigation";
|
|
@@ -0,0 +1,4 @@
|
|
|
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';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { intorProxy, intorProxy as intorMiddleware, } from "../../../src/adapters/next/proxy";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getLocale, getTranslator } from "../../../src/adapters/next/server";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { IntorProvider, type IntorProviderProps, TranslatorRuntimeProvider, type TranslatorRuntimeProviderProps, useTranslator, getClientLocale, } from "../../src/client/react";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { IntorProvider } from '../../src/client/react/contexts/intor-provider/intor-provider.js';
|
|
2
|
+
export { TranslatorRuntimeProvider } from '../../src/client/react/contexts/translator-runtime/provider.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import '../../src/client/react/contexts/translator-runtime/context.js';
|
|
5
|
+
export { useTranslator } from '../../src/client/react/translator/use-translator.js';
|
|
6
|
+
import 'next/navigation';
|
|
7
|
+
import 'react/jsx-runtime';
|
|
8
|
+
import '../../src/client/react/contexts/config/context.js';
|
|
9
|
+
import '../../src/client/react/contexts/locale/context.js';
|
|
10
|
+
export { getClientLocale } from '../../src/client/helpers/get-client-locale.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { intor, type IntorResult, loadMessages, isValidMessages, type Messages, type MessagesReader, getTranslator, clearLoggerPool, clearMessagesPool, loadLocalMessagesFromUrl, } 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 { isValidMessages } from '../../src/server/messages/shared/utils/is-valid-messages.js';
|
|
4
|
+
export { getTranslator } from '../../src/server/translator/get-translator.js';
|
|
5
|
+
export { clearLoggerPool } from '../../src/server/shared/logger/global-logger-pool.js';
|
|
6
|
+
export { clearMessagesPool } from '../../src/server/shared/messages/global-messages-pool.js';
|
|
7
|
+
export { loadLocalMessagesFromUrl } from '../../src/server/helpers/local-messages-from-url.js';
|
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
import type { GenLocale } from "../../../shared/types/generated
|
|
1
|
+
import type { GenConfigKeys, GenLocale } from "../../../shared/types/generated";
|
|
2
2
|
import type { Url } from "next/dist/shared/lib/router/router";
|
|
3
3
|
import type { LinkProps as NextLinkProps } from "next/link";
|
|
4
4
|
import * as React from "react";
|
|
5
|
-
interface LinkProps extends Omit<NextLinkProps, "href">, Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "href"> {
|
|
5
|
+
interface LinkProps<CK extends GenConfigKeys = "__default__"> extends Omit<NextLinkProps, "href">, Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "href"> {
|
|
6
6
|
href?: Url;
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Locale to navigate with.
|
|
9
|
+
*
|
|
10
|
+
* If `href` is omitted, the current route is used as the navigation target.
|
|
11
|
+
*/
|
|
12
|
+
locale?: GenLocale<CK>;
|
|
8
13
|
}
|
|
9
14
|
/**
|
|
10
|
-
*
|
|
15
|
+
* Locale-aware Link component.
|
|
11
16
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
17
|
+
* Wraps Next.js `Link`
|
|
18
|
+
*
|
|
19
|
+
* - Resolves a locale-aware navigation destination
|
|
20
|
+
* - Preserves external navigation behavior
|
|
21
|
+
* - Switches locale via client state or full reload when required
|
|
22
|
+
*
|
|
23
|
+
* This component is responsible only for executing the resolved target.
|
|
14
24
|
*/
|
|
15
|
-
export declare const Link: ({ href, locale, children, onClick, ...props }: LinkProps) => React.JSX.Element;
|
|
25
|
+
export declare const Link: <CK extends GenConfigKeys = "__default__">({ href, locale, children, onClick, ...props }: LinkProps<CK>) => React.JSX.Element;
|
|
16
26
|
export {};
|
|
@@ -3,23 +3,49 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import { formatUrl } from 'next/dist/shared/lib/router/utils/format-url';
|
|
4
4
|
import NextLink from 'next/link';
|
|
5
5
|
import 'react';
|
|
6
|
-
import
|
|
6
|
+
import '../../../client/react/contexts/config/context.js';
|
|
7
|
+
import '../../../client/react/contexts/locale/context.js';
|
|
8
|
+
import '../../../config/constants/cache.constants.js';
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
import '../../../client/react/contexts/messages/context.js';
|
|
12
|
+
import 'intor-translator';
|
|
13
|
+
import '../../../client/react/contexts/translator-runtime/context.js';
|
|
14
|
+
import '../../../client/react/contexts/translator/context.js';
|
|
15
|
+
import { useNavigationTarget } from '../../../client/react/navigation/use-navigation-target.js';
|
|
16
|
+
import { useNavigationStrategy } from '../../../client/react/navigation/use-navigation-strategy.js';
|
|
7
17
|
|
|
8
18
|
/**
|
|
9
|
-
*
|
|
19
|
+
* Locale-aware Link component.
|
|
20
|
+
*
|
|
21
|
+
* Wraps Next.js `Link`
|
|
22
|
+
*
|
|
23
|
+
* - Resolves a locale-aware navigation destination
|
|
24
|
+
* - Preserves external navigation behavior
|
|
25
|
+
* - Switches locale via client state or full reload when required
|
|
10
26
|
*
|
|
11
|
-
*
|
|
12
|
-
* - Full reload occurs only if the locale changes and requires it; otherwise updates context.
|
|
27
|
+
* This component is responsible only for executing the resolved target.
|
|
13
28
|
*/
|
|
14
29
|
const Link = ({ href, locale, children, onClick, ...props }) => {
|
|
15
|
-
const
|
|
16
|
-
const {
|
|
17
|
-
|
|
30
|
+
const { resolveNavigation } = useNavigationTarget();
|
|
31
|
+
const { decideNavigation } = useNavigationStrategy();
|
|
32
|
+
// Normalize Next.js href input into a string destination
|
|
33
|
+
const rawDestination = typeof href === "string" ? href : href ? formatUrl(href) : undefined;
|
|
34
|
+
// Resolve navigation target
|
|
35
|
+
const target = resolveNavigation({ destination: rawDestination, locale });
|
|
18
36
|
const handleClick = (e) => {
|
|
19
37
|
onClick?.(e);
|
|
20
|
-
|
|
38
|
+
if (e.defaultPrevented)
|
|
39
|
+
return;
|
|
40
|
+
// Decide how this navigation should be executed
|
|
41
|
+
const { kind } = decideNavigation(target);
|
|
42
|
+
if (kind === "reload") {
|
|
43
|
+
e.preventDefault(); // prevent client-side navigation
|
|
44
|
+
globalThis.location.href = target.destination;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
21
47
|
};
|
|
22
|
-
return (jsx(NextLink, { href:
|
|
48
|
+
return (jsx(NextLink, { href: target.destination, onClick: handleClick, ...props, children: children }));
|
|
23
49
|
};
|
|
24
50
|
|
|
25
51
|
export { Link };
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import type { IntorResolvedConfig } from "../../../config";
|
|
2
|
-
import type { GenLocale } from "../../../shared/types/generated
|
|
2
|
+
import type { GenConfigKeys, GenLocale } from "../../../shared/types/generated";
|
|
3
3
|
import type { RedirectType } from "next/navigation";
|
|
4
4
|
/**
|
|
5
|
-
* redirect
|
|
5
|
+
* Locale-aware redirect helper (server-only).
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* -
|
|
7
|
+
* Wraps Next.js `redirect`
|
|
8
|
+
*
|
|
9
|
+
* - Resolves the effective locale before redirecting
|
|
10
|
+
* - Applies locale prefix for internal destinations
|
|
11
|
+
* - Bypasses localization for external destinations
|
|
10
12
|
*/
|
|
11
|
-
export declare const redirect: ({ config, locale, url, type, }: {
|
|
13
|
+
export declare const redirect: <CK extends GenConfigKeys = "__default__">({ config, locale, url, type, }: {
|
|
12
14
|
config: IntorResolvedConfig;
|
|
13
|
-
locale?: GenLocale
|
|
15
|
+
locale?: GenLocale<CK>;
|
|
14
16
|
url: string;
|
|
15
17
|
type?: RedirectType | undefined;
|
|
16
|
-
}) => Promise<
|
|
18
|
+
}) => Promise<undefined>;
|
|
@@ -1,36 +1,37 @@
|
|
|
1
1
|
import { redirect as redirect$1 } from 'next/navigation';
|
|
2
|
-
import {
|
|
2
|
+
import { getLocale } from '../server/get-locale.js';
|
|
3
3
|
import 'intor-translator';
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
import '../../../config/constants/cache.constants.js';
|
|
8
7
|
|
|
9
8
|
|
|
9
|
+
import { localizePathname } from '../../../shared/utils/pathname/localize-pathname.js';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
import { localizePathname } from '../shared/utils/localize-pathname.js';
|
|
11
|
+
import { isExternalDestination } from '../../../shared/utils/is-external-destination.js';
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
|
-
* redirect
|
|
14
|
+
* Locale-aware redirect helper (server-only).
|
|
15
|
+
*
|
|
16
|
+
* Wraps Next.js `redirect`
|
|
16
17
|
*
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
19
|
-
* -
|
|
18
|
+
* - Resolves the effective locale before redirecting
|
|
19
|
+
* - Applies locale prefix for internal destinations
|
|
20
|
+
* - Bypasses localization for external destinations
|
|
20
21
|
*/
|
|
21
22
|
const redirect = async ({ config, locale, url, type, }) => {
|
|
22
|
-
|
|
23
|
+
// External destinations bypass app routing entirely
|
|
24
|
+
const isExternal = isExternalDestination(url);
|
|
25
|
+
if (isExternal) {
|
|
23
26
|
redirect$1(url);
|
|
27
|
+
return;
|
|
24
28
|
}
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
locale: isLocaleValid ? locale : detectedLocale,
|
|
32
|
-
});
|
|
33
|
-
redirect$1(localePrefixedPathname, type);
|
|
29
|
+
// Determine locale for this redirect
|
|
30
|
+
const targetLocale = locale && config.supportedLocales.includes(locale)
|
|
31
|
+
? locale
|
|
32
|
+
: await getLocale(config);
|
|
33
|
+
const { localizedPathname } = localizePathname(config, url, targetLocale);
|
|
34
|
+
return redirect$1(localizedPathname, type);
|
|
34
35
|
};
|
|
35
36
|
|
|
36
37
|
export { redirect };
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
8
|
* const { localizedPathname, standardizedPathname, unprefixedPathname } = usePathname();
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* // localizedPathname => "/en-US/about"
|
|
10
|
+
* // standardizedPathname => "/{locale}/about"
|
|
11
|
+
* // unprefixedPathname => "/about"
|
|
12
12
|
*/
|
|
13
13
|
export declare const usePathname: () => {
|
|
14
|
-
localizedPathname: string;
|
|
15
|
-
standardizedPathname: string;
|
|
16
14
|
unprefixedPathname: string;
|
|
15
|
+
standardizedPathname: string;
|
|
16
|
+
localizedPathname: string;
|
|
17
17
|
};
|
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
import { usePathname as usePathname$1 } from 'next/navigation';
|
|
2
|
-
import { localizePathname } from '../shared/utils/localize-pathname.js';
|
|
3
2
|
import 'react/jsx-runtime';
|
|
4
3
|
import 'react';
|
|
5
4
|
import '../../../client/react/contexts/config/context.js';
|
|
6
5
|
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
6
|
import '../../../client/react/contexts/locale/context.js';
|
|
17
7
|
import { useLocale } from '../../../client/react/contexts/locale/hook.js';
|
|
8
|
+
import { localizePathname } from '../../../shared/utils/pathname/localize-pathname.js';
|
|
18
9
|
|
|
19
10
|
/**
|
|
20
11
|
* Custom hook to get the current pathname in different forms based on the active locale.
|
|
@@ -24,9 +15,9 @@ import { useLocale } from '../../../client/react/contexts/locale/hook.js';
|
|
|
24
15
|
*
|
|
25
16
|
* @example
|
|
26
17
|
* const { localizedPathname, standardizedPathname, unprefixedPathname } = usePathname();
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
18
|
+
* // localizedPathname => "/en-US/about"
|
|
19
|
+
* // standardizedPathname => "/{locale}/about"
|
|
20
|
+
* // unprefixedPathname => "/about"
|
|
30
21
|
*/
|
|
31
22
|
const usePathname = () => {
|
|
32
23
|
const { config } = useConfig();
|
|
@@ -34,15 +25,11 @@ const usePathname = () => {
|
|
|
34
25
|
// Get the raw pathname from the Next.js usePathname hook
|
|
35
26
|
const rawPathname = usePathname$1();
|
|
36
27
|
// Generate the locale-prefixed pathname
|
|
37
|
-
const {
|
|
38
|
-
config,
|
|
39
|
-
pathname: rawPathname,
|
|
40
|
-
locale,
|
|
41
|
-
});
|
|
28
|
+
const { localizedPathname, standardizedPathname, unprefixedPathname } = localizePathname(config, rawPathname, locale);
|
|
42
29
|
return {
|
|
43
|
-
localizedPathname: localePrefixedPathname,
|
|
44
|
-
standardizedPathname,
|
|
45
30
|
unprefixedPathname,
|
|
31
|
+
standardizedPathname,
|
|
32
|
+
localizedPathname,
|
|
46
33
|
};
|
|
47
34
|
};
|
|
48
35
|
|
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
import type { GenLocale } from "../../../shared/types/generated
|
|
2
|
-
import type {
|
|
3
|
-
import type { NavigateOptions } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
|
1
|
+
import type { GenConfigKeys, GenLocale } from "../../../shared/types/generated";
|
|
2
|
+
import type { NavigateOptions, PrefetchOptions } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
4
|
+
* Locale-aware router hook.
|
|
6
5
|
*
|
|
7
|
-
* Wraps Next.js useRouter
|
|
6
|
+
* Wraps Next.js `useRouter`
|
|
7
|
+
*
|
|
8
|
+
* - Resolve locale-aware navigation targets
|
|
9
|
+
* - Decide execution strategy (client-side vs full reload)
|
|
10
|
+
* - Preserve correct behavior across navigation types
|
|
8
11
|
*/
|
|
9
12
|
export declare const useRouter: () => {
|
|
10
13
|
back(): void;
|
|
11
14
|
forward(): void;
|
|
12
15
|
refresh(): void;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
push: <CK extends GenConfigKeys = "__default__">(href: string, options?: NavigateOptions & {
|
|
17
|
+
locale?: GenLocale<CK>;
|
|
18
|
+
}) => void;
|
|
19
|
+
replace: <CK extends GenConfigKeys = "__default__">(href: string, options?: NavigateOptions & {
|
|
20
|
+
locale?: GenLocale<CK>;
|
|
16
21
|
}) => void;
|
|
17
|
-
|
|
18
|
-
locale?:
|
|
22
|
+
prefetch: <CK extends GenConfigKeys = "__default__">(href: string, options?: PrefetchOptions & {
|
|
23
|
+
locale?: GenLocale<CK>;
|
|
19
24
|
}) => void;
|
|
20
25
|
};
|
|
@@ -1,29 +1,63 @@
|
|
|
1
1
|
import { useRouter as useRouter$1 } from 'next/navigation';
|
|
2
|
-
import
|
|
2
|
+
import 'react/jsx-runtime';
|
|
3
|
+
import 'react';
|
|
4
|
+
import '../../../client/react/contexts/config/context.js';
|
|
5
|
+
import '../../../client/react/contexts/locale/context.js';
|
|
6
|
+
import '../../../config/constants/cache.constants.js';
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
import '../../../client/react/contexts/messages/context.js';
|
|
10
|
+
import 'intor-translator';
|
|
11
|
+
import '../../../client/react/contexts/translator-runtime/context.js';
|
|
12
|
+
import '../../../client/react/contexts/translator/context.js';
|
|
13
|
+
import { useNavigationTarget } from '../../../client/react/navigation/use-navigation-target.js';
|
|
14
|
+
import { useNavigationStrategy } from '../../../client/react/navigation/use-navigation-strategy.js';
|
|
3
15
|
|
|
4
16
|
/**
|
|
5
|
-
*
|
|
17
|
+
* Locale-aware router hook.
|
|
6
18
|
*
|
|
7
|
-
* Wraps Next.js useRouter
|
|
19
|
+
* Wraps Next.js `useRouter`
|
|
20
|
+
*
|
|
21
|
+
* - Resolve locale-aware navigation targets
|
|
22
|
+
* - Decide execution strategy (client-side vs full reload)
|
|
23
|
+
* - Preserve correct behavior across navigation types
|
|
8
24
|
*/
|
|
9
25
|
const useRouter = () => {
|
|
10
|
-
const { push, replace, ...rest } = useRouter$1();
|
|
11
|
-
const {
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
26
|
+
const { push: nextRouterPush, replace: nextRouterReplace, prefetch: nextRouterPrefetch, ...rest } = useRouter$1();
|
|
27
|
+
const { resolveNavigation } = useNavigationTarget();
|
|
28
|
+
const { decideNavigation } = useNavigationStrategy();
|
|
29
|
+
const push = (href, options) => {
|
|
30
|
+
const { locale } = options || {};
|
|
31
|
+
const target = resolveNavigation({ destination: href, locale });
|
|
32
|
+
const { kind } = decideNavigation(target);
|
|
33
|
+
if (kind === "reload") {
|
|
34
|
+
globalThis.location.href = target.destination;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
nextRouterPush(target.destination, options);
|
|
38
|
+
};
|
|
39
|
+
const replace = (href, options) => {
|
|
40
|
+
const { locale } = options || {};
|
|
41
|
+
const target = resolveNavigation({ destination: href, locale });
|
|
42
|
+
const { kind } = decideNavigation(target);
|
|
43
|
+
if (kind === "reload") {
|
|
44
|
+
globalThis.location.href = target.destination;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
nextRouterReplace(target.destination, options);
|
|
17
48
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
49
|
+
const prefetch = (href, options) => {
|
|
50
|
+
const { locale } = options || {};
|
|
51
|
+
const target = resolveNavigation({ destination: href, locale });
|
|
52
|
+
const { kind } = decideNavigation(target);
|
|
53
|
+
if (kind !== "client")
|
|
54
|
+
return; // Prefetch only makes sense for client-side navigation
|
|
55
|
+
nextRouterPrefetch(target.destination, options);
|
|
23
56
|
};
|
|
24
57
|
return {
|
|
25
|
-
push
|
|
26
|
-
replace
|
|
58
|
+
push,
|
|
59
|
+
replace,
|
|
60
|
+
prefetch,
|
|
27
61
|
...rest,
|
|
28
62
|
};
|
|
29
63
|
};
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import type { IntorResolvedConfig } from "../../../config
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../config";
|
|
2
2
|
import type { NextRequest } from "next/server";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Next.js routing adapter for Intor.
|
|
5
|
+
*
|
|
6
|
+
* Responsibilities:
|
|
7
|
+
* - Collect locale candidates from request-related sources
|
|
8
|
+
* - Delegate routing decisions to the routing core
|
|
9
|
+
* - Apply redirect behavior when required
|
|
10
|
+
* - Materialize routing decisions into persistent state (cookie)
|
|
11
|
+
* with configurable first-visit behavior
|
|
5
12
|
*/
|
|
6
|
-
export declare
|
|
13
|
+
export declare const intorProxy: (config: IntorResolvedConfig, request: NextRequest) => Promise<Response>;
|
|
@@ -1,22 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { headers } from 'next/headers';
|
|
2
|
+
import { NextResponse } from 'next/server';
|
|
3
|
+
import { setLocaleCookieEdge } from './utils/set-locale-cookie-edge.js';
|
|
4
|
+
import { resolveRouting } from '../../../routing/resolve-routing.js';
|
|
5
|
+
import { getLocaleFromAcceptLanguage } from '../../../shared/utils/locale/get-locale-from-accept-language.js';
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
|
-
*
|
|
8
|
+
* Next.js routing adapter for Intor.
|
|
9
|
+
*
|
|
10
|
+
* Responsibilities:
|
|
11
|
+
* - Collect locale candidates from request-related sources
|
|
12
|
+
* - Delegate routing decisions to the routing core
|
|
13
|
+
* - Apply redirect behavior when required
|
|
14
|
+
* - Materialize routing decisions into persistent state (cookie)
|
|
15
|
+
* with configurable first-visit behavior
|
|
7
16
|
*/
|
|
8
|
-
async
|
|
9
|
-
const {
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
17
|
+
const intorProxy = async (config, request) => {
|
|
18
|
+
const { defaultLocale, cookie, routing } = config;
|
|
19
|
+
// locale from accept-language header
|
|
20
|
+
const headersStore = await headers();
|
|
21
|
+
const acceptLanguageHeader = headersStore.get("accept-language");
|
|
22
|
+
const localeFromAcceptLanguage = getLocaleFromAcceptLanguage(config, acceptLanguageHeader || undefined);
|
|
23
|
+
// Resolve routing decision (locale + pathname)
|
|
24
|
+
const { locale, localeSource, pathname, shouldRedirect } = resolveRouting(config, request.nextUrl.pathname, {
|
|
25
|
+
host: request.nextUrl.host,
|
|
26
|
+
query: Object.fromEntries(request.nextUrl.searchParams.entries()),
|
|
27
|
+
cookie: request.cookies.get(config.cookie.name)?.value,
|
|
28
|
+
detected: localeFromAcceptLanguage || defaultLocale,
|
|
29
|
+
});
|
|
30
|
+
// Prepare Next.js response (redirect or pass-through)
|
|
31
|
+
const url = request.nextUrl.clone();
|
|
32
|
+
url.pathname = pathname;
|
|
33
|
+
const response = shouldRedirect
|
|
34
|
+
? NextResponse.redirect(url)
|
|
35
|
+
: NextResponse.next();
|
|
36
|
+
// Persist resolved locale to cookie
|
|
37
|
+
const isFirstVisit = localeSource === "detected";
|
|
38
|
+
if (!isFirstVisit || routing.firstVisit.persist) {
|
|
39
|
+
setLocaleCookieEdge({ response, locale, cookie });
|
|
13
40
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return await handlePrefixExceptDefault(config, request);
|
|
17
|
-
}
|
|
18
|
-
// ===== Prefix: all =====
|
|
19
|
-
return await handlePrefixAll(config, request);
|
|
20
|
-
}
|
|
41
|
+
return response;
|
|
42
|
+
};
|
|
21
43
|
|
|
22
44
|
export { intorProxy };
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import type { CookieResolvedOptions } from "../../../../config/types/cookie.types";
|
|
2
|
-
import type {
|
|
2
|
+
import type { NextResponse } from "next/server";
|
|
3
3
|
interface SetLocaleCookieParams {
|
|
4
|
-
request: NextRequest;
|
|
5
4
|
response: NextResponse;
|
|
6
5
|
cookie: CookieResolvedOptions;
|
|
7
6
|
locale: string;
|
|
8
|
-
override?: boolean;
|
|
9
7
|
}
|
|
10
8
|
/**
|
|
11
9
|
* Set a locale cookie on the response.
|
|
12
10
|
* - For Next.js proxy.
|
|
13
11
|
*/
|
|
14
|
-
export declare function setLocaleCookieEdge({
|
|
12
|
+
export declare function setLocaleCookieEdge({ response, cookie, locale, }: SetLocaleCookieParams): void;
|
|
15
13
|
export {};
|
|
@@ -2,13 +2,8 @@
|
|
|
2
2
|
* Set a locale cookie on the response.
|
|
3
3
|
* - For Next.js proxy.
|
|
4
4
|
*/
|
|
5
|
-
function setLocaleCookieEdge({
|
|
6
|
-
|
|
7
|
-
if (!cookie.enabled || !cookie.autoSetCookie)
|
|
8
|
-
return;
|
|
9
|
-
const isCookieExists = request.cookies.has(cookie.name);
|
|
10
|
-
// Cookie already exists and cannot override
|
|
11
|
-
if (isCookieExists && !override)
|
|
5
|
+
function setLocaleCookieEdge({ response, cookie, locale, }) {
|
|
6
|
+
if (!cookie.enabled || !cookie.persist)
|
|
12
7
|
return;
|
|
13
8
|
// Set cookie to response
|
|
14
9
|
response.cookies.set(cookie.name, locale, {
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IntorResolvedConfig } from "../../../config/types/intor-config.types";
|
|
2
|
+
import type { GenConfigKeys, GenLocale } from "../../../shared/types/generated";
|
|
3
|
+
/**
|
|
4
|
+
* Get the locale for the current Next.js request.
|
|
5
|
+
*/
|
|
6
|
+
export declare const getLocale: <CK extends GenConfigKeys = "__default__">(config: IntorResolvedConfig) => Promise<GenLocale<CK>>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { cookies, headers } from 'next/headers';
|
|
2
|
+
import { resolveLocale } from '../../../routing/locale/resolve-locale.js';
|
|
3
|
+
import { getLocaleFromAcceptLanguage } from '../../../shared/utils/locale/get-locale-from-accept-language.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Get the locale for the current Next.js request.
|
|
7
|
+
*/
|
|
8
|
+
const getLocale = async (config) => {
|
|
9
|
+
const { defaultLocale, cookie } = config;
|
|
10
|
+
// Locale from cookie
|
|
11
|
+
const cookiesStore = await cookies();
|
|
12
|
+
const cookieFromLocale = cookiesStore.get(cookie.name)?.value;
|
|
13
|
+
// locale from accept-language header
|
|
14
|
+
const headersStore = await headers();
|
|
15
|
+
const acceptLanguageHeader = headersStore.get("accept-language");
|
|
16
|
+
const localeFromAcceptLanguage = getLocaleFromAcceptLanguage(config, acceptLanguageHeader || undefined);
|
|
17
|
+
// Resolve locale and determine which source was used
|
|
18
|
+
const { locale } = resolveLocale(config, {
|
|
19
|
+
cookie: { locale: cookieFromLocale },
|
|
20
|
+
detected: { locale: localeFromAcceptLanguage || defaultLocale },
|
|
21
|
+
});
|
|
22
|
+
return locale;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { getLocale };
|