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.
Files changed (270) hide show
  1. package/README.md +10 -0
  2. package/dist/export/config/index.d.ts +1 -0
  3. package/dist/export/config/index.js +1 -0
  4. package/dist/export/index.d.ts +4 -0
  5. package/dist/export/index.js +4 -0
  6. package/dist/export/internal/index.d.ts +1 -0
  7. package/dist/export/next/index.d.ts +1 -0
  8. package/dist/export/next/index.js +4 -0
  9. package/dist/export/next/proxy/index.d.ts +1 -0
  10. package/dist/{exports → export}/next/proxy/index.js +0 -1
  11. package/dist/export/next/server/index.d.ts +1 -0
  12. package/dist/export/next/server/index.js +2 -0
  13. package/dist/export/react/index.d.ts +1 -0
  14. package/dist/export/react/index.js +10 -0
  15. package/dist/export/server/index.d.ts +1 -0
  16. package/dist/export/server/index.js +7 -0
  17. package/dist/src/adapters/next/navigation/link.d.ts +17 -7
  18. package/dist/src/adapters/next/navigation/link.js +35 -9
  19. package/dist/src/adapters/next/navigation/redirect.d.ts +10 -8
  20. package/dist/src/adapters/next/navigation/redirect.js +19 -18
  21. package/dist/src/adapters/next/navigation/use-pathname.d.ts +5 -5
  22. package/dist/src/adapters/next/navigation/use-pathname.js +7 -20
  23. package/dist/src/adapters/next/navigation/use-router.d.ts +15 -10
  24. package/dist/src/adapters/next/navigation/use-router.js +51 -17
  25. package/dist/src/adapters/next/proxy/index.d.ts +0 -1
  26. package/dist/src/adapters/next/proxy/intor-proxy.d.ts +10 -3
  27. package/dist/src/adapters/next/proxy/intor-proxy.js +38 -16
  28. package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.d.ts +2 -4
  29. package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.js +2 -7
  30. package/dist/src/adapters/next/server/get-locale.d.ts +6 -0
  31. package/dist/src/adapters/next/server/get-locale.js +25 -0
  32. package/dist/src/adapters/next/server/get-translator.d.ts +7 -5
  33. package/dist/src/adapters/next/server/get-translator.js +4 -4
  34. package/dist/src/adapters/next/server/index.d.ts +1 -1
  35. package/dist/src/client/helpers/get-client-locale.d.ts +11 -0
  36. package/dist/src/client/helpers/get-client-locale.js +24 -0
  37. package/dist/src/client/helpers/index.d.ts +1 -0
  38. package/dist/src/client/react/contexts/config/context.js +0 -1
  39. package/dist/src/client/react/contexts/config/hook.js +0 -1
  40. package/dist/src/client/react/contexts/config/provider.d.ts +1 -1
  41. package/dist/src/client/react/contexts/config/provider.js +5 -2
  42. package/dist/src/client/react/contexts/config/types.d.ts +6 -5
  43. package/dist/src/client/react/contexts/intor-provider/intor-provider.d.ts +1 -1
  44. package/dist/src/client/react/contexts/intor-provider/intor-provider.js +3 -3
  45. package/dist/src/client/react/contexts/intor-provider/types.d.ts +1 -2
  46. package/dist/src/client/react/contexts/locale/context.js +0 -1
  47. package/dist/src/client/react/contexts/locale/hook.js +0 -1
  48. package/dist/src/client/react/contexts/locale/provider.js +16 -26
  49. package/dist/src/client/react/contexts/locale/types.d.ts +4 -4
  50. package/dist/src/client/react/contexts/locale/utils/change-locale.d.ts +14 -16
  51. package/dist/src/client/react/contexts/locale/utils/change-locale.js +18 -27
  52. package/dist/src/client/react/contexts/messages/context.js +1 -4
  53. package/dist/src/client/react/contexts/messages/hook.js +0 -1
  54. package/dist/src/client/react/contexts/messages/provider.js +18 -11
  55. package/dist/src/client/react/contexts/messages/types.d.ts +4 -7
  56. package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.d.ts +10 -6
  57. package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.js +44 -31
  58. package/dist/src/client/react/contexts/translator/context.js +1 -4
  59. package/dist/src/client/react/contexts/translator/hook.d.ts +1 -2
  60. package/dist/src/client/react/contexts/translator/hook.js +0 -1
  61. package/dist/src/client/react/contexts/translator/provider.js +21 -24
  62. package/dist/src/client/react/contexts/translator/types.d.ts +5 -5
  63. package/dist/src/client/react/contexts/translator-runtime/context.d.ts +3 -0
  64. package/dist/src/client/react/contexts/translator-runtime/context.js +3 -0
  65. package/dist/src/client/react/contexts/translator-runtime/hook.d.ts +2 -0
  66. package/dist/src/client/react/contexts/translator-runtime/hook.js +9 -0
  67. package/dist/src/client/react/contexts/translator-runtime/index.d.ts +3 -0
  68. package/dist/src/client/react/contexts/translator-runtime/provider.d.ts +2 -0
  69. package/dist/src/client/react/contexts/translator-runtime/provider.js +15 -0
  70. package/dist/src/client/react/contexts/translator-runtime/types.d.ts +13 -0
  71. package/dist/src/client/react/index.d.ts +4 -3
  72. package/dist/src/client/react/navigation/index.d.ts +2 -0
  73. package/dist/src/client/react/navigation/use-navigation-strategy.d.ts +22 -0
  74. package/dist/src/client/react/navigation/use-navigation-strategy.js +37 -0
  75. package/dist/src/client/react/navigation/use-navigation-target.d.ts +12 -0
  76. package/dist/src/client/react/navigation/use-navigation-target.js +27 -0
  77. package/dist/src/client/react/{hooks → translator}/use-translator.d.ts +4 -4
  78. package/dist/src/client/react/{hooks → translator}/use-translator.js +4 -9
  79. package/dist/src/client/shared/utils/build-cookie-string.d.ts +5 -0
  80. package/dist/src/client/shared/utils/build-cookie-string.js +30 -0
  81. package/dist/src/client/shared/utils/index.d.ts +1 -0
  82. package/dist/src/client/shared/utils/locale/detect-browser-locale.d.ts +6 -0
  83. package/dist/src/client/shared/utils/locale/detect-browser-locale.js +12 -0
  84. package/dist/src/client/shared/utils/locale/get-locale-cookie-browser.d.ts +6 -0
  85. package/dist/src/client/shared/utils/locale/get-locale-cookie-browser.js +16 -0
  86. package/dist/src/client/shared/utils/locale/index.d.ts +4 -0
  87. package/dist/src/client/shared/utils/locale/set-document-locale.d.ts +6 -0
  88. package/dist/src/client/shared/utils/locale/set-document-locale.js +12 -0
  89. package/dist/src/client/shared/utils/locale/set-locale-cookie-browser.d.ts +7 -0
  90. package/dist/src/client/shared/utils/locale/set-locale-cookie-browser.js +18 -0
  91. package/dist/src/config/constants/cookie.constants.js +2 -2
  92. package/dist/src/config/constants/routing.constants.js +6 -0
  93. package/dist/src/config/define-intor-config.d.ts +16 -0
  94. package/dist/src/config/define-intor-config.js +18 -4
  95. package/dist/src/config/index.d.ts +0 -3
  96. package/dist/src/config/resolvers/resolve-cookie-options.d.ts +0 -9
  97. package/dist/src/config/resolvers/resolve-cookie-options.js +0 -9
  98. package/dist/src/config/resolvers/resolve-fallback-locales.d.ts +18 -1
  99. package/dist/src/config/resolvers/resolve-fallback-locales.js +17 -0
  100. package/dist/src/config/resolvers/resolve-routing-options.d.ts +0 -11
  101. package/dist/src/config/resolvers/resolve-routing-options.js +5 -13
  102. package/dist/src/config/types/cache.types.d.ts +2 -2
  103. package/dist/src/config/types/cookie.types.d.ts +10 -10
  104. package/dist/src/config/types/intor-config.types.d.ts +2 -0
  105. package/dist/src/config/types/loader.types.d.ts +15 -19
  106. package/dist/src/config/types/logger.types.d.ts +7 -5
  107. package/dist/src/config/types/routing.types.d.ts +33 -9
  108. package/dist/src/config/types/translator.types.d.ts +5 -2
  109. package/dist/src/config/validators/validate-default-locale.d.ts +9 -0
  110. package/dist/src/config/validators/validate-default-locale.js +9 -0
  111. package/dist/src/config/validators/validate-supported-locales.d.ts +8 -3
  112. package/dist/src/config/validators/validate-supported-locales.js +8 -3
  113. package/dist/src/routing/index.d.ts +1 -0
  114. package/dist/src/routing/locale/index.d.ts +1 -0
  115. package/dist/src/routing/locale/resolve-locale.d.ts +16 -0
  116. package/dist/src/routing/locale/resolve-locale.js +32 -0
  117. package/dist/src/routing/locale/types.d.ts +36 -0
  118. package/dist/src/routing/pathname/index.d.ts +1 -0
  119. package/dist/src/routing/pathname/resolve-pathname.d.ts +19 -0
  120. package/dist/src/routing/pathname/resolve-pathname.js +53 -0
  121. package/dist/src/routing/pathname/strategies/all.d.ts +6 -0
  122. package/dist/src/routing/pathname/strategies/all.js +23 -0
  123. package/dist/src/routing/pathname/strategies/except-default.d.ts +6 -0
  124. package/dist/src/routing/pathname/strategies/except-default.js +33 -0
  125. package/dist/src/routing/pathname/strategies/index.d.ts +3 -0
  126. package/dist/src/routing/pathname/strategies/none.d.ts +5 -0
  127. package/dist/src/routing/pathname/strategies/none.js +14 -0
  128. package/dist/src/routing/pathname/types.d.ts +28 -0
  129. package/dist/src/routing/resolve-navigation-target.d.ts +20 -0
  130. package/dist/src/routing/resolve-navigation-target.js +28 -0
  131. package/dist/src/routing/resolve-routing.d.ts +30 -0
  132. package/dist/src/routing/resolve-routing.js +38 -0
  133. package/dist/src/server/helpers/index.d.ts +1 -0
  134. package/dist/src/server/helpers/local-messages-from-url.d.ts +21 -0
  135. package/dist/src/server/helpers/local-messages-from-url.js +48 -0
  136. package/dist/src/server/index.d.ts +4 -2
  137. package/dist/src/server/intor/index.d.ts +1 -1
  138. package/dist/src/server/intor/intor.d.ts +12 -6
  139. package/dist/src/server/intor/intor.js +21 -39
  140. package/dist/src/server/intor/types.d.ts +5 -10
  141. package/dist/src/server/messages/index.d.ts +1 -5
  142. package/dist/src/server/messages/load-local-messages/index.d.ts +1 -1
  143. package/dist/src/server/messages/load-local-messages/load-local-messages.d.ts +11 -7
  144. package/dist/src/server/messages/load-local-messages/load-local-messages.js +46 -38
  145. package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.d.ts +5 -14
  146. package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +12 -29
  147. package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/types.d.ts +1 -1
  148. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.d.ts +2 -2
  149. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +8 -5
  150. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/types.d.ts +1 -1
  151. package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.d.ts +2 -2
  152. package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +3 -3
  153. package/dist/src/server/messages/load-local-messages/read-locale-messages/types.d.ts +1 -1
  154. package/dist/src/server/messages/load-local-messages/types.d.ts +12 -11
  155. package/dist/src/server/messages/load-messages.d.ts +10 -7
  156. package/dist/src/server/messages/load-messages.js +21 -21
  157. package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.d.ts +1 -1
  158. package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +6 -1
  159. package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/types.d.ts +1 -0
  160. package/dist/src/server/messages/load-remote-messages/index.d.ts +1 -1
  161. package/dist/src/server/messages/load-remote-messages/load-remote-messages.d.ts +10 -4
  162. package/dist/src/server/messages/load-remote-messages/load-remote-messages.js +65 -34
  163. package/dist/src/server/messages/load-remote-messages/types.d.ts +4 -3
  164. package/dist/src/server/messages/types.d.ts +2 -3
  165. package/dist/src/server/shared/logger/get-logger.d.ts +1 -1
  166. package/dist/src/server/shared/logger/get-logger.js +10 -5
  167. package/dist/src/server/translator/get-translator.d.ts +9 -9
  168. package/dist/src/server/translator/get-translator.js +6 -10
  169. package/dist/src/shared/constants/index.d.ts +1 -0
  170. package/dist/src/shared/error/intor-error.d.ts +4 -4
  171. package/dist/src/shared/types/generated.d.ts +53 -0
  172. package/dist/src/shared/types/index.d.ts +2 -0
  173. package/dist/src/shared/types/routing.d.ts +6 -0
  174. package/dist/src/shared/types/{translator-instance.types.d.ts → translator-instance.d.ts} +17 -19
  175. package/dist/src/shared/utils/deep-merge.d.ts +8 -0
  176. package/dist/src/shared/utils/deep-merge.js +36 -0
  177. package/dist/src/shared/utils/index.d.ts +4 -8
  178. package/dist/src/shared/utils/is-external-destination.d.ts +7 -0
  179. package/dist/src/shared/utils/is-external-destination.js +11 -0
  180. package/dist/src/shared/utils/locale/get-locale-from-accept-language.d.ts +19 -0
  181. package/dist/src/shared/utils/locale/get-locale-from-accept-language.js +45 -0
  182. package/dist/src/shared/utils/locale/get-locale-from-host.d.ts +17 -0
  183. package/dist/src/shared/utils/locale/get-locale-from-host.js +31 -0
  184. package/dist/src/shared/utils/locale/get-locale-from-pathname.d.ts +31 -0
  185. package/dist/src/shared/utils/locale/get-locale-from-pathname.js +52 -0
  186. package/dist/src/shared/utils/locale/get-locale-from-query.d.ts +20 -0
  187. package/dist/src/shared/utils/locale/get-locale-from-query.js +33 -0
  188. package/dist/src/shared/utils/locale/index.d.ts +4 -0
  189. package/dist/src/shared/utils/normalizers/index.d.ts +3 -0
  190. package/dist/src/shared/utils/normalizers/normalize-cache-key.d.ts +14 -0
  191. package/dist/src/shared/utils/{normalize-cache-key.js → normalizers/normalize-cache-key.js} +17 -1
  192. package/dist/src/shared/utils/normalizers/normalize-locale.d.ts +22 -0
  193. package/dist/src/shared/utils/{locale → normalizers}/normalize-locale.js +21 -4
  194. package/dist/src/shared/utils/{pathname → normalizers}/normalize-pathname.d.ts +1 -1
  195. package/dist/src/shared/utils/{pathname → normalizers}/normalize-pathname.js +1 -1
  196. package/dist/src/shared/utils/pathname/get-unprefixed-pathname.d.ts +14 -0
  197. package/dist/src/shared/utils/pathname/get-unprefixed-pathname.js +39 -0
  198. package/dist/src/shared/utils/pathname/index.d.ts +1 -0
  199. package/dist/src/shared/utils/pathname/locale-prefix-pathname.d.ts +16 -0
  200. package/dist/src/{adapters/next/shared/utils → shared/utils/pathname}/locale-prefix-pathname.js +17 -12
  201. package/dist/src/shared/utils/pathname/localize-pathname.d.ts +23 -0
  202. package/dist/src/shared/utils/pathname/localize-pathname.js +36 -0
  203. package/dist/src/shared/utils/pathname/standardize-pathname.d.ts +6 -11
  204. package/dist/src/shared/utils/pathname/standardize-pathname.js +8 -8
  205. package/package.json +74 -65
  206. package/dist/exports/config/index.d.ts +0 -2
  207. package/dist/exports/config/index.js +0 -4
  208. package/dist/exports/index.d.ts +0 -5
  209. package/dist/exports/index.js +0 -11
  210. package/dist/exports/next/index.d.ts +0 -3
  211. package/dist/exports/next/index.js +0 -9
  212. package/dist/exports/next/proxy/index.d.ts +0 -2
  213. package/dist/exports/next/server/index.d.ts +0 -2
  214. package/dist/exports/next/server/index.js +0 -2
  215. package/dist/exports/react/index.d.ts +0 -2
  216. package/dist/exports/react/index.js +0 -6
  217. package/dist/exports/server/index.d.ts +0 -2
  218. package/dist/exports/server/index.js +0 -7
  219. package/dist/src/adapters/next/navigation/utils/should-full-reload.d.ts +0 -7
  220. package/dist/src/adapters/next/navigation/utils/should-full-reload.js +0 -19
  221. package/dist/src/adapters/next/navigation/utils/use-locale-switch.d.ts +0 -16
  222. package/dist/src/adapters/next/navigation/utils/use-locale-switch.js +0 -58
  223. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.d.ts +0 -12
  224. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.js +0 -60
  225. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.d.ts +0 -16
  226. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.js +0 -81
  227. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.d.ts +0 -10
  228. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.js +0 -22
  229. package/dist/src/adapters/next/proxy/utils/create-response.d.ts +0 -17
  230. package/dist/src/adapters/next/proxy/utils/create-response.js +0 -42
  231. package/dist/src/adapters/next/proxy/utils/determine-initial-locale.d.ts +0 -8
  232. package/dist/src/adapters/next/proxy/utils/determine-initial-locale.js +0 -28
  233. package/dist/src/adapters/next/proxy/utils/set-pathname-header.d.ts +0 -12
  234. package/dist/src/adapters/next/proxy/utils/set-pathname-header.js +0 -13
  235. package/dist/src/adapters/next/server/get-i18n-context.d.ts +0 -9
  236. package/dist/src/adapters/next/server/get-i18n-context.js +0 -47
  237. package/dist/src/adapters/next/shared/constants/pathname-header-name.d.ts +0 -1
  238. package/dist/src/adapters/next/shared/constants/pathname-header-name.js +0 -4
  239. package/dist/src/adapters/next/shared/utils/locale-prefix-pathname.d.ts +0 -16
  240. package/dist/src/adapters/next/shared/utils/localize-pathname.d.ts +0 -18
  241. package/dist/src/adapters/next/shared/utils/localize-pathname.js +0 -36
  242. package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.d.ts +0 -8
  243. package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.js +0 -28
  244. package/dist/src/client/react/contexts/translate-handlers/context.d.ts +0 -2
  245. package/dist/src/client/react/contexts/translate-handlers/context.js +0 -6
  246. package/dist/src/client/react/contexts/translate-handlers/hook.d.ts +0 -2
  247. package/dist/src/client/react/contexts/translate-handlers/hook.js +0 -10
  248. package/dist/src/client/react/contexts/translate-handlers/index.d.ts +0 -3
  249. package/dist/src/client/react/contexts/translate-handlers/provider.d.ts +0 -2
  250. package/dist/src/client/react/contexts/translate-handlers/provider.js +0 -11
  251. package/dist/src/client/react/contexts/translate-handlers/types.d.ts +0 -7
  252. package/dist/src/client/shared/utils/get-initial-locale.d.ts +0 -11
  253. package/dist/src/client/shared/utils/get-initial-locale.js +0 -21
  254. package/dist/src/shared/types/generated.types.d.ts +0 -30
  255. package/dist/src/shared/utils/client/build-cookie-string.d.ts +0 -9
  256. package/dist/src/shared/utils/client/build-cookie-string.js +0 -33
  257. package/dist/src/shared/utils/client/set-locale-cookie-browser.d.ts +0 -13
  258. package/dist/src/shared/utils/client/set-locale-cookie-browser.js +0 -21
  259. package/dist/src/shared/utils/locale/normalize-locale.d.ts +0 -4
  260. package/dist/src/shared/utils/locale/resolve-preferred-locale.d.ts +0 -5
  261. package/dist/src/shared/utils/locale/resolve-preferred-locale.js +0 -26
  262. package/dist/src/shared/utils/merge-messages.d.ts +0 -6
  263. package/dist/src/shared/utils/merge-messages.js +0 -13
  264. package/dist/src/shared/utils/normalize-cache-key.d.ts +0 -3
  265. package/dist/src/shared/utils/pathname/extract-pathname.d.ts +0 -28
  266. package/dist/src/shared/utils/pathname/extract-pathname.js +0 -58
  267. package/dist/src/shared/utils/resolve-namespaces.d.ts +0 -10
  268. package/dist/src/shared/utils/resolve-namespaces.js +0 -33
  269. /package/dist/src/server/{messages/shared → shared/messages}/global-messages-pool.d.ts +0 -0
  270. /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";
@@ -1,2 +1 @@
1
1
  export { intorProxy as intorMiddleware, intorProxy } from '../../../src/adapters/next/proxy/intor-proxy.js';
2
- export { PATHNAME_HEADER_NAME } from '../../../src/adapters/next/shared/constants/pathname-header-name.js';
@@ -0,0 +1 @@
1
+ export { getLocale, getTranslator } from "../../../src/adapters/next/server";
@@ -0,0 +1,2 @@
1
+ export { getLocale } from '../../../src/adapters/next/server/get-locale.js';
2
+ export { getTranslator } from '../../../src/adapters/next/server/get-translator.js';
@@ -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.types";
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
- locale?: GenLocale;
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
- * Localized Link component
15
+ * Locale-aware Link component.
11
16
  *
12
- * - Wraps Next.js Link and handles locale switching.
13
- * - Full reload occurs only if the locale changes and requires it; otherwise updates context.
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 { useLocaleSwitch } from './utils/use-locale-switch.js';
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
- * Localized Link component
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
- * - Wraps Next.js Link and handles locale switching.
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 formatted = typeof href === "string" ? href : href ? formatUrl(href) : undefined;
16
- const { resolveHref, switchLocale } = useLocaleSwitch();
17
- const { resolvedHref } = resolveHref({ href: formatted, locale });
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
- switchLocale({ href: formatted, locale });
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: resolvedHref, onClick: handleClick, ...props, children: children }));
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.types";
2
+ import type { GenConfigKeys, GenLocale } from "../../../shared/types/generated";
3
3
  import type { RedirectType } from "next/navigation";
4
4
  /**
5
- * redirect utility.
5
+ * Locale-aware redirect helper (server-only).
6
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.
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<never>;
18
+ }) => Promise<undefined>;
@@ -1,36 +1,37 @@
1
1
  import { redirect as redirect$1 } from 'next/navigation';
2
- import { getI18nContext } from '../server/get-i18n-context.js';
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 utility.
14
+ * Locale-aware redirect helper (server-only).
15
+ *
16
+ * Wraps Next.js `redirect`
16
17
  *
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.
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
- if (url.startsWith("http")) {
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
- 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);
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
- * console.log(localizedPathname); // e.g. "/en/about"
10
- * console.log(standardizedPathname); // e.g. "/{locale}/about"
11
- * console.log(unprefixedPathname); // e.g. "/about"
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
- * console.log(localizedPathname); // e.g. "/en/about"
28
- * console.log(standardizedPathname); // e.g. "/{locale}/about"
29
- * console.log(unprefixedPathname); // e.g. "/about"
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 { localePrefixedPathname, standardizedPathname, unprefixedPathname } = localizePathname({
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.types";
2
- import type { Locale } from "intor-translator";
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
- * useRouter hook.
4
+ * Locale-aware router hook.
6
5
  *
7
- * Wraps Next.js useRouter and provides push/replace methods that automatically switch locale.
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
- 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
+ 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
- replace: (href: string, options?: NavigateOptions & {
18
- locale?: 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 { useLocaleSwitch } from './utils/use-locale-switch.js';
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
- * useRouter hook.
17
+ * Locale-aware router hook.
6
18
  *
7
- * Wraps Next.js useRouter and provides push/replace methods that automatically switch locale.
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 { 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);
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
- // Replace with locale
19
- const replaceWithLocale = (href, options) => {
20
- const resolvedHref = switchLocale({ href, locale: options?.locale });
21
- if (resolvedHref)
22
- replace(resolvedHref, options);
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: pushWithLocale,
26
- replace: replaceWithLocale,
58
+ push,
59
+ replace,
60
+ prefetch,
27
61
  ...rest,
28
62
  };
29
63
  };
@@ -1,2 +1 @@
1
1
  export { intorProxy } from "./intor-proxy";
2
- export { PATHNAME_HEADER_NAME } from "../../../adapters/next/shared/constants/pathname-header-name";
@@ -1,6 +1,13 @@
1
- import type { IntorResolvedConfig } from "../../../config/types/intor-config.types";
1
+ import type { IntorResolvedConfig } from "../../../config";
2
2
  import type { NextRequest } from "next/server";
3
3
  /**
4
- * Handle locale routing based on prefix config
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 function intorProxy<Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req): Promise<Response>;
13
+ export declare const intorProxy: (config: IntorResolvedConfig, request: NextRequest) => Promise<Response>;
@@ -1,22 +1,44 @@
1
- import { handlePrefixAll } from './handle-prefix/handle-prefix-all.js';
2
- import { handlePrefixExceptDefault } from './handle-prefix/handle-prefix-except-default.js';
3
- import { handlePrefixNone } from './handle-prefix/handle-prefix-none.js';
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
- * Handle locale routing based on prefix config
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 function intorProxy(config, request) {
9
- const { prefix } = config.routing;
10
- // ===== Prefix: none =====
11
- if (prefix === "none") {
12
- return handlePrefixNone(config, request);
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
- // ===== Prefix: except-default =====
15
- if (prefix === "except-default") {
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 { NextRequest, NextResponse } from "next/server";
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({ request, response, cookie, locale, override, }: SetLocaleCookieParams): void;
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({ request, response, cookie, locale, override = false, // Default to not override existed cookie
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 };