intor 2.3.3 → 2.3.5

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 (422) hide show
  1. package/README.md +79 -0
  2. package/dist/core/export/config/index.js +1 -0
  3. package/dist/core/export/index.js +4 -0
  4. package/dist/core/export/server/index.js +7 -0
  5. package/dist/{src → core/src}/config/constants/cookie.constants.js +2 -2
  6. package/dist/{src → core/src}/config/constants/routing.constants.js +6 -0
  7. package/dist/{src → core/src}/config/define-intor-config.js +18 -4
  8. package/dist/core/src/config/resolvers/resolve-cookie-options.js +10 -0
  9. package/dist/{src → core/src}/config/resolvers/resolve-fallback-locales.js +17 -0
  10. package/dist/core/src/config/resolvers/resolve-routing-options.js +20 -0
  11. package/dist/{src → core/src}/config/validators/validate-default-locale.js +9 -0
  12. package/dist/{src → core/src}/config/validators/validate-supported-locales.js +8 -3
  13. package/dist/core/src/server/helpers/local-messages-from-url.js +48 -0
  14. package/dist/core/src/server/intor/intor.js +49 -0
  15. package/dist/core/src/server/messages/load-local-messages/load-local-messages.js +93 -0
  16. package/dist/{src → core/src}/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +12 -29
  17. package/dist/{src → core/src}/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +8 -5
  18. package/dist/{src → core/src}/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +3 -3
  19. package/dist/{src → core/src}/server/messages/load-messages.js +21 -21
  20. package/dist/{src → core/src}/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +6 -1
  21. package/dist/core/src/server/messages/load-remote-messages/load-remote-messages.js +110 -0
  22. package/dist/{src → core/src}/server/shared/logger/get-logger.js +10 -5
  23. package/dist/core/src/server/shared/logger/global-logger-pool.js +16 -0
  24. package/dist/core/src/server/shared/messages/global-messages-pool.js +27 -0
  25. package/dist/{src → core/src}/server/translator/get-translator.js +6 -10
  26. package/dist/core/src/shared/utils/deep-merge.js +36 -0
  27. package/dist/{src/shared/utils → core/src/shared/utils/normalizers}/normalize-cache-key.js +17 -1
  28. package/dist/{src/shared/utils/pathname → core/src/shared/utils/normalizers}/normalize-pathname.js +1 -1
  29. package/dist/core/src/shared/utils/pathname/get-unprefixed-pathname.js +39 -0
  30. package/dist/{src/adapters/next/shared/utils → core/src/shared/utils/pathname}/locale-prefix-pathname.js +17 -12
  31. package/dist/core/src/shared/utils/pathname/localize-pathname.js +36 -0
  32. package/dist/{src → core/src}/shared/utils/pathname/standardize-pathname.js +8 -8
  33. package/dist/next/export/next/index.js +4 -0
  34. package/dist/{exports → next/export}/next/proxy/index.js +0 -1
  35. package/dist/next/export/next/server/index.js +2 -0
  36. package/dist/next/src/adapters/next/navigation/link.js +54 -0
  37. package/dist/next/src/adapters/next/navigation/redirect.js +37 -0
  38. package/dist/next/src/adapters/next/navigation/use-pathname.js +31 -0
  39. package/dist/next/src/adapters/next/navigation/use-router.js +68 -0
  40. package/dist/next/src/adapters/next/proxy/intor-proxy.js +44 -0
  41. package/dist/{src → next/src}/adapters/next/proxy/utils/set-locale-cookie-edge.js +2 -7
  42. package/dist/next/src/adapters/next/server/get-locale.js +25 -0
  43. package/dist/{src → next/src}/adapters/next/server/get-translator.js +4 -4
  44. package/dist/next/src/client/react/contexts/config/context.js +3 -0
  45. package/dist/next/src/client/react/contexts/locale/context.js +3 -0
  46. package/dist/next/src/client/react/contexts/messages/context.js +3 -0
  47. package/dist/next/src/client/react/contexts/translator/context.js +3 -0
  48. package/dist/next/src/client/react/contexts/translator-runtime/context.js +3 -0
  49. package/dist/next/src/client/react/navigation/use-navigation-strategy.js +32 -0
  50. package/dist/next/src/client/react/navigation/use-navigation-target.js +20 -0
  51. package/dist/next/src/client/shared/utils/build-cookie-string.js +30 -0
  52. package/dist/next/src/client/shared/utils/locale/set-locale-cookie-browser.js +18 -0
  53. package/dist/next/src/config/constants/cache.constants.js +7 -0
  54. package/dist/next/src/routing/locale/resolve-locale.js +32 -0
  55. package/dist/next/src/routing/pathname/resolve-pathname.js +53 -0
  56. package/dist/next/src/routing/pathname/strategies/all.js +23 -0
  57. package/dist/next/src/routing/pathname/strategies/except-default.js +33 -0
  58. package/dist/next/src/routing/pathname/strategies/none.js +14 -0
  59. package/dist/next/src/routing/resolve-navigation-target.js +28 -0
  60. package/dist/next/src/routing/resolve-routing.js +38 -0
  61. package/dist/next/src/server/messages/load-local-messages/load-local-messages.js +93 -0
  62. package/dist/next/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +78 -0
  63. package/dist/next/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +88 -0
  64. package/dist/next/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.js +12 -0
  65. package/dist/next/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.js +21 -0
  66. package/dist/next/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +31 -0
  67. package/dist/next/src/server/messages/load-messages.js +77 -0
  68. package/dist/next/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +55 -0
  69. package/dist/next/src/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +25 -0
  70. package/dist/next/src/server/messages/load-remote-messages/load-remote-messages.js +110 -0
  71. package/dist/next/src/server/messages/shared/utils/is-valid-messages.js +36 -0
  72. package/dist/next/src/server/shared/logger/get-logger.js +39 -0
  73. package/dist/next/src/server/translator/get-translator.js +35 -0
  74. package/dist/next/src/shared/constants/prefix-placeholder.js +4 -0
  75. package/dist/next/src/shared/utils/deep-merge.js +36 -0
  76. package/dist/next/src/shared/utils/is-external-destination.js +11 -0
  77. package/dist/next/src/shared/utils/locale/get-locale-from-accept-language.js +45 -0
  78. package/dist/next/src/shared/utils/locale/get-locale-from-host.js +31 -0
  79. package/dist/next/src/shared/utils/locale/get-locale-from-pathname.js +52 -0
  80. package/dist/next/src/shared/utils/locale/get-locale-from-query.js +33 -0
  81. package/dist/next/src/shared/utils/normalizers/normalize-cache-key.js +45 -0
  82. package/dist/{src/shared/utils/locale → next/src/shared/utils/normalizers}/normalize-locale.js +21 -4
  83. package/dist/next/src/shared/utils/normalizers/normalize-pathname.js +43 -0
  84. package/dist/next/src/shared/utils/pathname/get-unprefixed-pathname.js +39 -0
  85. package/dist/next/src/shared/utils/pathname/locale-prefix-pathname.js +38 -0
  86. package/dist/next/src/shared/utils/pathname/localize-pathname.js +36 -0
  87. package/dist/next/src/shared/utils/pathname/standardize-pathname.js +30 -0
  88. package/dist/react/export/react/index.js +18 -0
  89. package/dist/react/src/client/helpers/get-client-locale.js +24 -0
  90. package/dist/{src → react/src}/client/react/contexts/config/context.js +0 -1
  91. package/dist/{src → react/src}/client/react/contexts/config/hook.js +0 -1
  92. package/dist/{src → react/src}/client/react/contexts/config/provider.js +5 -2
  93. package/dist/{src → react/src}/client/react/contexts/intor-provider/intor-provider.js +3 -3
  94. package/dist/{src → react/src}/client/react/contexts/locale/context.js +0 -1
  95. package/dist/{src → react/src}/client/react/contexts/locale/hook.js +0 -1
  96. package/dist/react/src/client/react/contexts/locale/provider.js +38 -0
  97. package/dist/react/src/client/react/contexts/locale/utils/change-locale.js +26 -0
  98. package/dist/{src → react/src}/client/react/contexts/messages/context.js +0 -1
  99. package/dist/{src → react/src}/client/react/contexts/messages/hook.js +0 -1
  100. package/dist/{src → react/src}/client/react/contexts/messages/provider.js +18 -11
  101. package/dist/react/src/client/react/contexts/messages/utils/use-refetch-messages.js +70 -0
  102. package/dist/{src → react/src}/client/react/contexts/translator/context.js +0 -1
  103. package/dist/{src → react/src}/client/react/contexts/translator/hook.js +0 -1
  104. package/dist/{src → react/src}/client/react/contexts/translator/provider.js +23 -26
  105. package/dist/react/src/client/react/contexts/translator-runtime/context.js +5 -0
  106. package/dist/react/src/client/react/contexts/translator-runtime/hook.js +9 -0
  107. package/dist/react/src/client/react/contexts/translator-runtime/provider.js +15 -0
  108. package/dist/react/src/client/react/render/create-react-renderer.js +36 -0
  109. package/dist/react/src/client/react/render/render-rich-message-react.js +22 -0
  110. package/dist/react/src/client/react/translator/create-t-rich.js +23 -0
  111. package/dist/react/src/client/react/translator/t.js +15 -0
  112. package/dist/{src/client/react/hooks → react/src/client/react/translator}/use-translator.js +7 -10
  113. package/dist/react/src/client/shared/utils/build-cookie-string.js +30 -0
  114. package/dist/react/src/client/shared/utils/locale/detect-browser-locale.js +12 -0
  115. package/dist/react/src/client/shared/utils/locale/get-locale-cookie-browser.js +16 -0
  116. package/dist/react/src/client/shared/utils/locale/set-document-locale.js +12 -0
  117. package/dist/react/src/client/shared/utils/locale/set-locale-cookie-browser.js +18 -0
  118. package/dist/react/src/config/constants/cache.constants.js +7 -0
  119. package/dist/react/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +55 -0
  120. package/dist/react/src/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +25 -0
  121. package/dist/react/src/server/messages/load-remote-messages/load-remote-messages.js +110 -0
  122. package/dist/react/src/server/messages/shared/utils/is-valid-messages.js +36 -0
  123. package/dist/react/src/server/shared/logger/get-logger.js +39 -0
  124. package/dist/react/src/server/shared/logger/global-logger-pool.js +8 -0
  125. package/dist/react/src/server/shared/messages/global-messages-pool.js +10 -0
  126. package/dist/react/src/shared/utils/deep-merge.js +36 -0
  127. package/dist/react/src/shared/utils/normalizers/normalize-cache-key.js +45 -0
  128. package/dist/react/src/shared/utils/normalizers/normalize-locale.js +59 -0
  129. package/dist/types/export/config/index.d.ts +1 -0
  130. package/dist/types/export/index.d.ts +4 -0
  131. package/dist/types/export/internal/index.d.ts +1 -0
  132. package/dist/types/export/next/index.d.ts +1 -0
  133. package/dist/types/export/next/proxy/index.d.ts +1 -0
  134. package/dist/types/export/next/server/index.d.ts +1 -0
  135. package/dist/types/export/react/index.d.ts +1 -0
  136. package/dist/types/export/server/index.d.ts +1 -0
  137. package/dist/types/src/adapters/next/navigation/link.d.ts +26 -0
  138. package/dist/types/src/adapters/next/navigation/redirect.d.ts +18 -0
  139. package/dist/{src → types/src}/adapters/next/navigation/use-pathname.d.ts +5 -5
  140. package/dist/types/src/adapters/next/navigation/use-router.d.ts +25 -0
  141. package/dist/types/src/adapters/next/proxy/index.d.ts +1 -0
  142. package/dist/types/src/adapters/next/proxy/intor-proxy.d.ts +13 -0
  143. package/dist/{src → types/src}/adapters/next/proxy/utils/set-locale-cookie-edge.d.ts +2 -4
  144. package/dist/types/src/adapters/next/server/get-locale.d.ts +6 -0
  145. package/dist/{src → types/src}/adapters/next/server/get-translator.d.ts +7 -8
  146. package/dist/types/src/adapters/next/server/index.d.ts +2 -0
  147. package/dist/types/src/client/helpers/get-client-locale.d.ts +11 -0
  148. package/dist/types/src/client/helpers/index.d.ts +1 -0
  149. package/dist/types/src/client/react/contexts/config/provider.d.ts +2 -0
  150. package/dist/{src → types/src}/client/react/contexts/config/types.d.ts +6 -5
  151. package/dist/types/src/client/react/contexts/index.d.ts +6 -0
  152. package/dist/types/src/client/react/contexts/intor-provider/intor-provider.d.ts +2 -0
  153. package/dist/{src → types/src}/client/react/contexts/intor-provider/types.d.ts +1 -2
  154. package/dist/types/src/client/react/contexts/locale/utils/change-locale.d.ts +20 -0
  155. package/dist/{src → types/src}/client/react/contexts/messages/types.d.ts +4 -7
  156. package/dist/types/src/client/react/contexts/messages/utils/use-refetch-messages.d.ts +20 -0
  157. package/dist/types/src/client/react/contexts/translator/hook.d.ts +2 -0
  158. package/dist/types/src/client/react/contexts/translator/types.d.ts +11 -0
  159. package/dist/types/src/client/react/contexts/translator-runtime/context.d.ts +3 -0
  160. package/dist/types/src/client/react/contexts/translator-runtime/hook.d.ts +2 -0
  161. package/dist/types/src/client/react/contexts/translator-runtime/index.d.ts +3 -0
  162. package/dist/types/src/client/react/contexts/translator-runtime/provider.d.ts +2 -0
  163. package/dist/types/src/client/react/contexts/translator-runtime/types.d.ts +13 -0
  164. package/dist/types/src/client/react/index.d.ts +4 -0
  165. package/dist/types/src/client/react/navigation/index.d.ts +2 -0
  166. package/dist/types/src/client/react/navigation/use-navigation-strategy.d.ts +22 -0
  167. package/dist/types/src/client/react/navigation/use-navigation-target.d.ts +12 -0
  168. package/dist/types/src/client/react/render/create-react-renderer.d.ts +17 -0
  169. package/dist/types/src/client/react/render/index.d.ts +2 -0
  170. package/dist/types/src/client/react/render/render-rich-message-react.d.ts +13 -0
  171. package/dist/types/src/client/react/render/types.d.ts +17 -0
  172. package/dist/types/src/client/react/translator/create-t-rich.d.ts +15 -0
  173. package/dist/types/src/client/react/translator/index.d.ts +2 -0
  174. package/dist/types/src/client/react/translator/t.d.ts +27 -0
  175. package/dist/types/src/client/react/translator/translator-instance.d.ts +12 -0
  176. package/dist/types/src/client/react/translator/use-translator.d.ts +8 -0
  177. package/dist/types/src/client/shared/types/index.d.ts +1 -0
  178. package/dist/types/src/client/shared/types/translator-instance.d.ts +11 -0
  179. package/dist/types/src/client/shared/utils/build-cookie-string.d.ts +5 -0
  180. package/dist/types/src/client/shared/utils/index.d.ts +1 -0
  181. package/dist/types/src/client/shared/utils/locale/detect-browser-locale.d.ts +6 -0
  182. package/dist/types/src/client/shared/utils/locale/get-locale-cookie-browser.d.ts +6 -0
  183. package/dist/types/src/client/shared/utils/locale/index.d.ts +4 -0
  184. package/dist/types/src/client/shared/utils/locale/set-document-locale.d.ts +6 -0
  185. package/dist/types/src/client/shared/utils/locale/set-locale-cookie-browser.d.ts +7 -0
  186. package/dist/types/src/config/define-intor-config.d.ts +18 -0
  187. package/dist/types/src/config/index.d.ts +2 -0
  188. package/dist/types/src/config/resolvers/resolve-cookie-options.d.ts +2 -0
  189. package/dist/types/src/config/resolvers/resolve-fallback-locales.d.ts +20 -0
  190. package/dist/types/src/config/resolvers/resolve-routing-options.d.ts +2 -0
  191. package/dist/{src → types/src}/config/types/cache.types.d.ts +2 -2
  192. package/dist/types/src/config/types/cookie.types.d.ts +23 -0
  193. package/dist/{src → types/src}/config/types/intor-config.types.d.ts +2 -0
  194. package/dist/types/src/config/types/loader.types.d.ts +34 -0
  195. package/dist/types/src/config/types/logger.types.d.ts +9 -0
  196. package/dist/types/src/config/types/routing.types.d.ts +39 -0
  197. package/dist/types/src/config/types/translator.types.d.ts +7 -0
  198. package/dist/types/src/config/validators/validate-default-locale.d.ts +12 -0
  199. package/dist/types/src/config/validators/validate-supported-locales.d.ts +12 -0
  200. package/dist/types/src/routing/index.d.ts +1 -0
  201. package/dist/types/src/routing/locale/index.d.ts +1 -0
  202. package/dist/types/src/routing/locale/resolve-locale.d.ts +16 -0
  203. package/dist/types/src/routing/locale/types.d.ts +36 -0
  204. package/dist/types/src/routing/pathname/index.d.ts +1 -0
  205. package/dist/types/src/routing/pathname/resolve-pathname.d.ts +19 -0
  206. package/dist/types/src/routing/pathname/strategies/all.d.ts +6 -0
  207. package/dist/types/src/routing/pathname/strategies/except-default.d.ts +6 -0
  208. package/dist/types/src/routing/pathname/strategies/index.d.ts +3 -0
  209. package/dist/types/src/routing/pathname/strategies/none.d.ts +5 -0
  210. package/dist/types/src/routing/pathname/types.d.ts +28 -0
  211. package/dist/types/src/routing/resolve-navigation-target.d.ts +20 -0
  212. package/dist/types/src/routing/resolve-routing.d.ts +30 -0
  213. package/dist/types/src/server/helpers/index.d.ts +1 -0
  214. package/dist/types/src/server/helpers/local-messages-from-url.d.ts +21 -0
  215. package/dist/types/src/server/index.d.ts +6 -0
  216. package/dist/types/src/server/intor/index.d.ts +2 -0
  217. package/dist/types/src/server/intor/intor.d.ts +20 -0
  218. package/dist/types/src/server/intor/types.d.ts +9 -0
  219. package/dist/types/src/server/messages/index.d.ts +3 -0
  220. package/dist/types/src/server/messages/load-local-messages/index.d.ts +2 -0
  221. package/dist/types/src/server/messages/load-local-messages/load-local-messages.d.ts +15 -0
  222. package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.d.ts +5 -14
  223. package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/collect-file-entries/types.d.ts +1 -1
  224. package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.d.ts +2 -2
  225. package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/parse-file-entries/types.d.ts +1 -1
  226. package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/read-locale-messages.d.ts +2 -2
  227. package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/types.d.ts +1 -1
  228. package/dist/types/src/server/messages/load-local-messages/types.d.ts +22 -0
  229. package/dist/types/src/server/messages/load-messages.d.ts +14 -0
  230. package/dist/{src → types/src}/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.d.ts +1 -1
  231. package/dist/{src → types/src}/server/messages/load-remote-messages/fetch-locale-messages/types.d.ts +1 -0
  232. package/dist/types/src/server/messages/load-remote-messages/index.d.ts +2 -0
  233. package/dist/types/src/server/messages/load-remote-messages/load-remote-messages.d.ts +15 -0
  234. package/dist/{src → types/src}/server/messages/load-remote-messages/types.d.ts +4 -3
  235. package/dist/{src → types/src}/server/messages/types.d.ts +2 -3
  236. package/dist/{src → types/src}/server/shared/logger/get-logger.d.ts +1 -1
  237. package/dist/{src/server/messages/shared → types/src/server/shared/messages}/global-messages-pool.d.ts +8 -1
  238. package/dist/{src → types/src}/server/translator/get-translator.d.ts +8 -12
  239. package/dist/types/src/shared/constants/index.d.ts +1 -0
  240. package/dist/{src → types/src}/shared/error/intor-error.d.ts +4 -4
  241. package/dist/types/src/shared/types/generated.d.ts +53 -0
  242. package/dist/types/src/shared/types/index.d.ts +2 -0
  243. package/dist/types/src/shared/types/routing.d.ts +6 -0
  244. package/dist/types/src/shared/types/translator-instance.d.ts +27 -0
  245. package/dist/types/src/shared/utils/deep-merge.d.ts +8 -0
  246. package/dist/types/src/shared/utils/index.d.ts +4 -0
  247. package/dist/types/src/shared/utils/is-external-destination.d.ts +7 -0
  248. package/dist/types/src/shared/utils/locale/get-locale-from-accept-language.d.ts +19 -0
  249. package/dist/types/src/shared/utils/locale/get-locale-from-host.d.ts +17 -0
  250. package/dist/types/src/shared/utils/locale/get-locale-from-pathname.d.ts +31 -0
  251. package/dist/types/src/shared/utils/locale/get-locale-from-query.d.ts +20 -0
  252. package/dist/types/src/shared/utils/locale/index.d.ts +4 -0
  253. package/dist/types/src/shared/utils/normalizers/index.d.ts +3 -0
  254. package/dist/types/src/shared/utils/normalizers/normalize-cache-key.d.ts +14 -0
  255. package/dist/types/src/shared/utils/normalizers/normalize-locale.d.ts +22 -0
  256. package/dist/{src/shared/utils/pathname → types/src/shared/utils/normalizers}/normalize-pathname.d.ts +1 -1
  257. package/dist/types/src/shared/utils/pathname/get-unprefixed-pathname.d.ts +14 -0
  258. package/dist/types/src/shared/utils/pathname/index.d.ts +1 -0
  259. package/dist/types/src/shared/utils/pathname/locale-prefix-pathname.d.ts +16 -0
  260. package/dist/types/src/shared/utils/pathname/localize-pathname.d.ts +23 -0
  261. package/dist/types/src/shared/utils/pathname/standardize-pathname.d.ts +13 -0
  262. package/package.json +76 -65
  263. package/dist/exports/config/index.d.ts +0 -2
  264. package/dist/exports/config/index.js +0 -4
  265. package/dist/exports/index.d.ts +0 -5
  266. package/dist/exports/index.js +0 -11
  267. package/dist/exports/next/index.d.ts +0 -3
  268. package/dist/exports/next/index.js +0 -9
  269. package/dist/exports/next/proxy/index.d.ts +0 -2
  270. package/dist/exports/next/server/index.d.ts +0 -2
  271. package/dist/exports/next/server/index.js +0 -2
  272. package/dist/exports/react/index.d.ts +0 -2
  273. package/dist/exports/react/index.js +0 -6
  274. package/dist/exports/server/index.d.ts +0 -2
  275. package/dist/exports/server/index.js +0 -6
  276. package/dist/src/adapters/next/navigation/link.d.ts +0 -16
  277. package/dist/src/adapters/next/navigation/link.js +0 -25
  278. package/dist/src/adapters/next/navigation/redirect.d.ts +0 -16
  279. package/dist/src/adapters/next/navigation/redirect.js +0 -36
  280. package/dist/src/adapters/next/navigation/use-pathname.js +0 -49
  281. package/dist/src/adapters/next/navigation/use-router.d.ts +0 -20
  282. package/dist/src/adapters/next/navigation/use-router.js +0 -31
  283. package/dist/src/adapters/next/navigation/utils/should-full-reload.d.ts +0 -7
  284. package/dist/src/adapters/next/navigation/utils/should-full-reload.js +0 -19
  285. package/dist/src/adapters/next/navigation/utils/use-locale-switch.d.ts +0 -16
  286. package/dist/src/adapters/next/navigation/utils/use-locale-switch.js +0 -58
  287. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.d.ts +0 -12
  288. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.js +0 -60
  289. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.d.ts +0 -16
  290. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.js +0 -81
  291. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.d.ts +0 -10
  292. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.js +0 -22
  293. package/dist/src/adapters/next/proxy/index.d.ts +0 -2
  294. package/dist/src/adapters/next/proxy/intor-proxy.d.ts +0 -6
  295. package/dist/src/adapters/next/proxy/intor-proxy.js +0 -22
  296. package/dist/src/adapters/next/proxy/utils/create-response.d.ts +0 -17
  297. package/dist/src/adapters/next/proxy/utils/create-response.js +0 -42
  298. package/dist/src/adapters/next/proxy/utils/determine-initial-locale.d.ts +0 -8
  299. package/dist/src/adapters/next/proxy/utils/determine-initial-locale.js +0 -28
  300. package/dist/src/adapters/next/proxy/utils/set-pathname-header.d.ts +0 -12
  301. package/dist/src/adapters/next/proxy/utils/set-pathname-header.js +0 -13
  302. package/dist/src/adapters/next/server/get-i18n-context.d.ts +0 -9
  303. package/dist/src/adapters/next/server/get-i18n-context.js +0 -47
  304. package/dist/src/adapters/next/server/index.d.ts +0 -2
  305. package/dist/src/adapters/next/shared/constants/pathname-header-name.d.ts +0 -1
  306. package/dist/src/adapters/next/shared/constants/pathname-header-name.js +0 -4
  307. package/dist/src/adapters/next/shared/utils/locale-prefix-pathname.d.ts +0 -16
  308. package/dist/src/adapters/next/shared/utils/localize-pathname.d.ts +0 -18
  309. package/dist/src/adapters/next/shared/utils/localize-pathname.js +0 -36
  310. package/dist/src/client/react/contexts/config/provider.d.ts +0 -2
  311. package/dist/src/client/react/contexts/intor-provider/intor-provider.d.ts +0 -2
  312. package/dist/src/client/react/contexts/locale/provider.js +0 -48
  313. package/dist/src/client/react/contexts/locale/utils/change-locale.d.ts +0 -22
  314. package/dist/src/client/react/contexts/locale/utils/change-locale.js +0 -35
  315. package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.d.ts +0 -8
  316. package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.js +0 -28
  317. package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.d.ts +0 -16
  318. package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.js +0 -57
  319. package/dist/src/client/react/contexts/translate-handlers/context.d.ts +0 -2
  320. package/dist/src/client/react/contexts/translate-handlers/context.js +0 -6
  321. package/dist/src/client/react/contexts/translate-handlers/hook.d.ts +0 -2
  322. package/dist/src/client/react/contexts/translate-handlers/hook.js +0 -10
  323. package/dist/src/client/react/contexts/translate-handlers/index.d.ts +0 -3
  324. package/dist/src/client/react/contexts/translate-handlers/provider.d.ts +0 -2
  325. package/dist/src/client/react/contexts/translate-handlers/provider.js +0 -11
  326. package/dist/src/client/react/contexts/translate-handlers/types.d.ts +0 -7
  327. package/dist/src/client/react/contexts/translator/hook.d.ts +0 -3
  328. package/dist/src/client/react/contexts/translator/types.d.ts +0 -11
  329. package/dist/src/client/react/hooks/use-translator.d.ts +0 -12
  330. package/dist/src/client/react/index.d.ts +0 -4
  331. package/dist/src/client/shared/utils/get-initial-locale.d.ts +0 -11
  332. package/dist/src/client/shared/utils/get-initial-locale.js +0 -21
  333. package/dist/src/config/define-intor-config.d.ts +0 -2
  334. package/dist/src/config/index.d.ts +0 -5
  335. package/dist/src/config/resolvers/resolve-cookie-options.d.ts +0 -11
  336. package/dist/src/config/resolvers/resolve-cookie-options.js +0 -19
  337. package/dist/src/config/resolvers/resolve-fallback-locales.d.ts +0 -3
  338. package/dist/src/config/resolvers/resolve-routing-options.d.ts +0 -13
  339. package/dist/src/config/resolvers/resolve-routing-options.js +0 -28
  340. package/dist/src/config/types/cookie.types.d.ts +0 -23
  341. package/dist/src/config/types/loader.types.d.ts +0 -38
  342. package/dist/src/config/types/logger.types.d.ts +0 -7
  343. package/dist/src/config/types/routing.types.d.ts +0 -15
  344. package/dist/src/config/types/translator.types.d.ts +0 -4
  345. package/dist/src/config/validators/validate-default-locale.d.ts +0 -3
  346. package/dist/src/config/validators/validate-supported-locales.d.ts +0 -7
  347. package/dist/src/server/index.d.ts +0 -4
  348. package/dist/src/server/intor/index.d.ts +0 -2
  349. package/dist/src/server/intor/intor.d.ts +0 -14
  350. package/dist/src/server/intor/intor.js +0 -67
  351. package/dist/src/server/intor/types.d.ts +0 -14
  352. package/dist/src/server/messages/index.d.ts +0 -7
  353. package/dist/src/server/messages/load-local-messages/index.d.ts +0 -2
  354. package/dist/src/server/messages/load-local-messages/load-local-messages.d.ts +0 -11
  355. package/dist/src/server/messages/load-local-messages/load-local-messages.js +0 -85
  356. package/dist/src/server/messages/load-local-messages/types.d.ts +0 -21
  357. package/dist/src/server/messages/load-messages.d.ts +0 -11
  358. package/dist/src/server/messages/load-remote-messages/index.d.ts +0 -2
  359. package/dist/src/server/messages/load-remote-messages/load-remote-messages.d.ts +0 -9
  360. package/dist/src/server/messages/load-remote-messages/load-remote-messages.js +0 -79
  361. package/dist/src/shared/types/generated.types.d.ts +0 -30
  362. package/dist/src/shared/types/translator-instance.types.d.ts +0 -33
  363. package/dist/src/shared/utils/client/build-cookie-string.d.ts +0 -9
  364. package/dist/src/shared/utils/client/build-cookie-string.js +0 -33
  365. package/dist/src/shared/utils/client/set-locale-cookie-browser.d.ts +0 -13
  366. package/dist/src/shared/utils/client/set-locale-cookie-browser.js +0 -21
  367. package/dist/src/shared/utils/index.d.ts +0 -8
  368. package/dist/src/shared/utils/locale/normalize-locale.d.ts +0 -4
  369. package/dist/src/shared/utils/locale/resolve-preferred-locale.d.ts +0 -5
  370. package/dist/src/shared/utils/locale/resolve-preferred-locale.js +0 -26
  371. package/dist/src/shared/utils/merge-messages.d.ts +0 -6
  372. package/dist/src/shared/utils/merge-messages.js +0 -13
  373. package/dist/src/shared/utils/normalize-cache-key.d.ts +0 -3
  374. package/dist/src/shared/utils/pathname/extract-pathname.d.ts +0 -28
  375. package/dist/src/shared/utils/pathname/extract-pathname.js +0 -58
  376. package/dist/src/shared/utils/pathname/standardize-pathname.d.ts +0 -18
  377. package/dist/src/shared/utils/resolve-namespaces.d.ts +0 -10
  378. package/dist/src/shared/utils/resolve-namespaces.js +0 -33
  379. package/dist/{src → core/src}/config/constants/cache.constants.js +0 -0
  380. package/dist/{src → core/src}/config/resolvers/resolve-cache-options.js +0 -0
  381. package/dist/{src → core/src}/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.js +0 -0
  382. package/dist/{src → core/src}/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.js +0 -0
  383. package/dist/{src → core/src}/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +0 -0
  384. package/dist/{src → core/src}/server/messages/shared/utils/is-valid-messages.js +0 -0
  385. package/dist/{src → core/src}/shared/constants/prefix-placeholder.js +0 -0
  386. package/dist/{src → core/src}/shared/error/intor-error.js +0 -0
  387. package/dist/{src → next/src}/server/shared/logger/global-logger-pool.js +0 -0
  388. package/dist/{src/server/messages/shared → next/src/server/shared/messages}/global-messages-pool.js +0 -0
  389. package/dist/{src → types/src}/adapters/next/navigation/index.d.ts +0 -0
  390. package/dist/{src → types/src}/client/react/contexts/config/context.d.ts +0 -0
  391. package/dist/{src → types/src}/client/react/contexts/config/hook.d.ts +0 -0
  392. package/dist/{src → types/src}/client/react/contexts/config/index.d.ts +0 -0
  393. package/dist/{src → types/src}/client/react/contexts/intor-provider/index.d.ts +0 -0
  394. package/dist/{src → types/src}/client/react/contexts/locale/context.d.ts +0 -0
  395. package/dist/{src → types/src}/client/react/contexts/locale/hook.d.ts +0 -0
  396. package/dist/{src → types/src}/client/react/contexts/locale/index.d.ts +0 -0
  397. package/dist/{src → types/src}/client/react/contexts/locale/provider.d.ts +0 -0
  398. package/dist/{src → types/src}/client/react/contexts/locale/types.d.ts +4 -4
  399. /package/dist/{src → types/src}/client/react/contexts/messages/context.d.ts +0 -0
  400. /package/dist/{src → types/src}/client/react/contexts/messages/hook.d.ts +0 -0
  401. /package/dist/{src → types/src}/client/react/contexts/messages/index.d.ts +0 -0
  402. /package/dist/{src → types/src}/client/react/contexts/messages/provider.d.ts +0 -0
  403. /package/dist/{src → types/src}/client/react/contexts/translator/context.d.ts +0 -0
  404. /package/dist/{src → types/src}/client/react/contexts/translator/index.d.ts +0 -0
  405. /package/dist/{src → types/src}/client/react/contexts/translator/provider.d.ts +0 -0
  406. /package/dist/{src → types/src}/config/constants/cache.constants.d.ts +0 -0
  407. /package/dist/{src → types/src}/config/constants/cookie.constants.d.ts +0 -0
  408. /package/dist/{src → types/src}/config/constants/routing.constants.d.ts +0 -0
  409. /package/dist/{src → types/src}/config/resolvers/resolve-cache-options.d.ts +0 -0
  410. /package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/collect-file-entries/index.d.ts +0 -0
  411. /package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/index.d.ts +0 -0
  412. /package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/parse-file-entries/index.d.ts +0 -0
  413. /package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.d.ts +0 -0
  414. /package/dist/{src → types/src}/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.d.ts +0 -0
  415. /package/dist/{src → types/src}/server/messages/load-remote-messages/fetch-locale-messages/index.d.ts +0 -0
  416. /package/dist/{src → types/src}/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.d.ts +0 -0
  417. /package/dist/{src → types/src}/server/messages/shared/types.d.ts +0 -0
  418. /package/dist/{src → types/src}/server/messages/shared/utils/is-valid-messages.d.ts +0 -0
  419. /package/dist/{src → types/src}/server/shared/logger/global-logger-pool.d.ts +0 -0
  420. /package/dist/{src → types/src}/server/translator/index.d.ts +0 -0
  421. /package/dist/{src → types/src}/shared/constants/prefix-placeholder.d.ts +0 -0
  422. /package/dist/{src → types/src}/shared/error/index.d.ts +0 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Build URLSearchParams from an object.
3
+ * Supports string or string[] values. Ignores undefined/null.
4
+ */
5
+ const buildSearchParams = (params) => {
6
+ const searchParams = new URLSearchParams();
7
+ const appendParam = (key, value) => {
8
+ if (value === undefined || value === null)
9
+ return;
10
+ if (Array.isArray(value) && value.length === 0)
11
+ return;
12
+ if (Array.isArray(value)) {
13
+ value.forEach((v) => v && searchParams.append(key, v));
14
+ }
15
+ else {
16
+ searchParams.append(key, value);
17
+ }
18
+ };
19
+ Object.entries(params).forEach(([key, value]) => {
20
+ appendParam(key, value);
21
+ });
22
+ return searchParams;
23
+ };
24
+
25
+ export { buildSearchParams };
@@ -0,0 +1,110 @@
1
+ import { DEFAULT_CACHE_OPTIONS } from '../../../config/constants/cache.constants.js';
2
+ import { fetchLocaleMessages } from './fetch-locale-messages/fetch-locale-messages.js';
3
+ import { buildSearchParams } from './fetch-locale-messages/utils/build-search-params.js';
4
+ import { getLogger } from '../../shared/logger/get-logger.js';
5
+ import { getGlobalMessagesPool } from '../../shared/messages/global-messages-pool.js';
6
+ import { normalizeCacheKey } from '../../../shared/utils/normalizers/normalize-cache-key.js';
7
+
8
+ /**
9
+ * Load locale messages from a remote API.
10
+ *
11
+ * This function acts as the orchestration layer for remote message loading.
12
+ * It is responsible for:
13
+ *
14
+ * - Resolving fallback locales in order
15
+ * - Coordinating cache read / write behavior
16
+ * - Respecting abort signals across the entire async flow
17
+ *
18
+ * Network fetching and data validation are delegated to lower-level utilities.
19
+ */
20
+ const loadRemoteMessages = async ({ pool = getGlobalMessagesPool(), rootDir, locale, fallbackLocales, namespaces, remoteUrl, remoteHeaders, extraOptions: { cacheOptions = DEFAULT_CACHE_OPTIONS, loggerOptions = { id: "default" }, } = {}, allowCacheWrite = false, signal, }) => {
21
+ const baseLogger = getLogger({ ...loggerOptions });
22
+ const logger = baseLogger.child({ scope: "load-remote-messages" });
23
+ // Abort early if the request has already been cancelled
24
+ if (signal?.aborted) {
25
+ logger.debug("Remote message loading aborted before fetch.");
26
+ return;
27
+ }
28
+ const start = performance.now();
29
+ logger.debug("Loading remote messages.", { remoteUrl });
30
+ // --- Cache key
31
+ const cacheKey = normalizeCacheKey([
32
+ loggerOptions.id,
33
+ "loaderType:remote",
34
+ rootDir,
35
+ locale,
36
+ (fallbackLocales ?? []).toSorted().join(","),
37
+ (namespaces ?? []).toSorted().join(","),
38
+ ]);
39
+ // --- Cache read --------------------------------------------------
40
+ if (cacheOptions.enabled && cacheKey) {
41
+ const cached = await pool?.get(cacheKey);
42
+ if (signal?.aborted) {
43
+ logger.debug("Remote message loading aborted after cache read.");
44
+ return;
45
+ }
46
+ if (cached) {
47
+ logger.debug("Messages cache hit.", { key: cacheKey });
48
+ return cached;
49
+ }
50
+ }
51
+ const candidateLocales = [locale, ...(fallbackLocales || [])];
52
+ let messages;
53
+ // Try each candidate locale in order and stop at the first successful result
54
+ for (let i = 0; i < candidateLocales.length; i++) {
55
+ const candidateLocale = candidateLocales[i];
56
+ const isLast = i === candidateLocales.length - 1;
57
+ try {
58
+ const fetched = await fetchLocaleMessages({
59
+ remoteUrl,
60
+ remoteHeaders,
61
+ locale: candidateLocale,
62
+ searchParams: buildSearchParams({ rootDir, namespaces }),
63
+ extraOptions: { loggerOptions },
64
+ signal,
65
+ });
66
+ // Stop at the first locale that yields non-empty messages
67
+ if (fetched && Object.values(fetched[candidateLocale] || {}).length > 0) {
68
+ messages = fetched;
69
+ break;
70
+ }
71
+ }
72
+ catch (error) {
73
+ if (error instanceof Error && error.name === "AbortError") {
74
+ logger.debug("Remote message loading aborted.");
75
+ return;
76
+ }
77
+ if (isLast) {
78
+ logger.warn("Failed to load messages for all candidate locales.", {
79
+ locale,
80
+ fallbackLocales,
81
+ });
82
+ }
83
+ else {
84
+ logger.warn(`Failed to fetch locale messages for "${candidateLocale}", trying next fallback.`);
85
+ }
86
+ logger.trace("Remote fetch error detail.", {
87
+ locale: candidateLocale,
88
+ error,
89
+ });
90
+ }
91
+ }
92
+ // --- Cache write --------------------------------------------------
93
+ if (cacheOptions.enabled && allowCacheWrite && cacheKey && messages) {
94
+ if (signal?.aborted) {
95
+ logger.debug("Remote message loading aborted before cache write.");
96
+ return;
97
+ }
98
+ await pool?.set(cacheKey, messages, cacheOptions.ttl);
99
+ }
100
+ // Final success log with resolved locale and timing
101
+ if (messages) {
102
+ logger.trace("Finished loading remote messages.", {
103
+ loadedLocale: messages ? Object.keys(messages)[0] : undefined,
104
+ duration: `${Math.round(performance.now() - start)} ms`,
105
+ });
106
+ }
107
+ return messages;
108
+ };
109
+
110
+ export { loadRemoteMessages };
@@ -0,0 +1,36 @@
1
+ /** Check if a value is a plain object (not null, not array) */
2
+ function isPlainObject(value) {
3
+ return typeof value === "object" && value !== null && !Array.isArray(value);
4
+ }
5
+ /**
6
+ * Check if a value is a valid **Messages** object.
7
+ *
8
+ * - Uses an iterative approach to avoid stack overflow with deeply nested objects.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * isValidMessages({ en: { hello: "Hello" } }) // true
13
+ * isValidMessages({ en: { count: 5 } }) // false
14
+ * ```
15
+ */
16
+ function isValidMessages(value) {
17
+ if (!isPlainObject(value))
18
+ return false;
19
+ const stack = [value];
20
+ while (stack.length > 0) {
21
+ const current = stack.pop();
22
+ for (const v of Object.values(current)) {
23
+ if (typeof v === "string")
24
+ continue;
25
+ if (isPlainObject(v)) {
26
+ stack.push(v);
27
+ }
28
+ else {
29
+ return false;
30
+ }
31
+ }
32
+ }
33
+ return true;
34
+ }
35
+
36
+ export { isPlainObject, isValidMessages };
@@ -0,0 +1,39 @@
1
+ import { logry } from 'logry';
2
+ import { getGlobalLoggerPool } from './global-logger-pool.js';
3
+
4
+ const DEFAULT_FORMAT_CONFIG = {
5
+ timestamp: { withDate: false },
6
+ };
7
+ const DEFAULT_RENDER_CONFIG = {
8
+ timestamp: {},
9
+ id: { visible: true, prefix: "<", suffix: ">" },
10
+ meta: { lineBreaksAfter: 1 },
11
+ };
12
+ /**
13
+ * Get a shared logger instance by id.
14
+ * - Safe across hot reloads
15
+ * - Prevents unbounded memory usage via soft LRU
16
+ */
17
+ function getLogger({ id = "default", formatConfig, renderConfig, preset, ...options }) {
18
+ const pool = getGlobalLoggerPool();
19
+ let logger = pool.get(id);
20
+ if (!logger) {
21
+ logger = logry({
22
+ id,
23
+ formatConfig: !formatConfig && !preset ? DEFAULT_FORMAT_CONFIG : formatConfig,
24
+ renderConfig: !renderConfig && !preset ? DEFAULT_RENDER_CONFIG : renderConfig,
25
+ preset,
26
+ ...options,
27
+ });
28
+ pool.set(id, logger);
29
+ // Soft LRU: keep pool size under control
30
+ if (pool.size > 1000) {
31
+ const keys = [...pool.keys()];
32
+ for (const key of keys.slice(0, 200))
33
+ pool.delete(key);
34
+ }
35
+ }
36
+ return logger;
37
+ }
38
+
39
+ export { getLogger };
@@ -0,0 +1,8 @@
1
+ function getGlobalLoggerPool() {
2
+ if (!globalThis.__INTOR_LOGGER_POOL__) {
3
+ globalThis.__INTOR_LOGGER_POOL__ = new Map();
4
+ }
5
+ return globalThis.__INTOR_LOGGER_POOL__;
6
+ }
7
+
8
+ export { getGlobalLoggerPool };
@@ -0,0 +1,10 @@
1
+ import Keyv from 'keyv';
2
+
3
+ function getGlobalMessagesPool() {
4
+ if (!globalThis.__INTOR_MESSAGES_POOL__) {
5
+ globalThis.__INTOR_MESSAGES_POOL__ = new Keyv();
6
+ }
7
+ return globalThis.__INTOR_MESSAGES_POOL__;
8
+ }
9
+
10
+ export { getGlobalMessagesPool };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Deeply merges two objects.
3
+ * - Nested objects → merged recursively
4
+ * - Array / primitive → b overwrites a
5
+ */
6
+ const deepMerge = (a, b) => {
7
+ if (!a && !b)
8
+ return undefined;
9
+ if (!a)
10
+ return b;
11
+ if (!b)
12
+ return a;
13
+ const result = { ...a };
14
+ for (const key in b) {
15
+ if (Object.prototype.hasOwnProperty.call(b, key)) {
16
+ const av = a[key];
17
+ const bv = b[key];
18
+ if (av &&
19
+ bv &&
20
+ typeof av === "object" &&
21
+ typeof bv === "object" &&
22
+ !Array.isArray(av) &&
23
+ !Array.isArray(bv)) {
24
+ // recursive merge
25
+ result[key] = deepMerge(av, bv);
26
+ }
27
+ else {
28
+ // overwrite with primitive or array
29
+ result[key] = bv;
30
+ }
31
+ }
32
+ }
33
+ return result;
34
+ };
35
+
36
+ export { deepMerge };
@@ -0,0 +1,45 @@
1
+ const CACHE_KEY_DELIMITER = "|";
2
+ const sanitize = (k) => k
3
+ .replaceAll(/[\u200B-\u200D\uFEFF]/g, "")
4
+ .replaceAll(/[\r\n]/g, "")
5
+ .trim();
6
+ /**
7
+ * Normalizes a value into a stable cache key string.
8
+ *
9
+ * - Supports primitive values and structured array keys.
10
+ * - Produces deterministic output suitable for cache identifiers.
11
+ *
12
+ * Notes:
13
+ * - `null`, `undefined`, or empty arrays return `null`.
14
+ * - Special tokens are used for boolean, null, and undefined values
15
+ * to preserve semantic differences.
16
+ */
17
+ const normalizeCacheKey = (key, delimiter = CACHE_KEY_DELIMITER) => {
18
+ // Treat nullish values as "no cache key"
19
+ if (key === null || key === undefined)
20
+ return null;
21
+ if (Array.isArray(key)) {
22
+ // Empty array produces no meaningful cache key
23
+ if (key.length === 0)
24
+ return null;
25
+ const normalized = key.map((k) => {
26
+ // Preserve semantic differences for special values
27
+ if (k === null)
28
+ return "__null";
29
+ if (k === undefined)
30
+ return "__undefined";
31
+ if (typeof k === "boolean")
32
+ return k ? "__true" : "__false";
33
+ return sanitize(String(k));
34
+ });
35
+ // Join segments into a single deterministic cache key
36
+ return normalized.join(delimiter);
37
+ }
38
+ // Normalize boolean primitives explicitly
39
+ if (typeof key === "boolean")
40
+ return key ? "__true" : "__false";
41
+ // Fallback: stringify primitive values
42
+ return String(key);
43
+ };
44
+
45
+ export { normalizeCacheKey };
@@ -0,0 +1,59 @@
1
+ const toCanonical = (input) => {
2
+ try {
3
+ return Intl.getCanonicalLocales(input)[0];
4
+ }
5
+ catch {
6
+ return;
7
+ }
8
+ };
9
+ /**
10
+ * Normalizes a locale string and resolves the best match
11
+ * from a list of supported locales.
12
+ *
13
+ * Resolution strategy:
14
+ *
15
+ * 1. Exact canonical match (BCP 47)
16
+ * 2. Base language fallback
17
+ * - Falls back by base language when no exact match is found
18
+ * (e.g. `"en"` → `"en-US"`).
19
+ * - Script and region subtags are ignored during this step
20
+ * (e.g. `"zh-Hans"` → `"zh-Hant-TW"`)
21
+ * - Preference is determined by the order of `supportedLocales`.
22
+ *
23
+ * Returns `undefined` if no suitable match is found.
24
+ *
25
+ * Notes:
26
+ * - Invalid locale inputs are ignored gracefully.
27
+ * - Always returns an original entry from `supportedLocales`.
28
+ * - Requires `Intl` locale support in the runtime.
29
+ */
30
+ const normalizeLocale = (locale, supportedLocales = []) => {
31
+ if (!locale || supportedLocales.length === 0)
32
+ return;
33
+ const canonicalLocale = toCanonical(locale);
34
+ if (!canonicalLocale)
35
+ return;
36
+ const supportedCanonicalMap = new Map();
37
+ for (const l of supportedLocales) {
38
+ const normalized = toCanonical(l);
39
+ if (normalized) {
40
+ supportedCanonicalMap.set(normalized, l);
41
+ }
42
+ }
43
+ // 1. Exact match
44
+ if (supportedCanonicalMap.has(canonicalLocale)) {
45
+ return supportedCanonicalMap.get(canonicalLocale);
46
+ }
47
+ const baseLang = canonicalLocale.split("-")[0];
48
+ // 2. Match by same base language (e.g., "en" matches "en-US" or "en-GB")
49
+ for (const [key, original] of supportedCanonicalMap) {
50
+ const supportedBase = key.split("-")[0];
51
+ if (supportedBase === baseLang) {
52
+ return original;
53
+ }
54
+ }
55
+ // 3. No match
56
+ return;
57
+ };
58
+
59
+ export { normalizeLocale };
@@ -0,0 +1 @@
1
+ export { defineIntorConfig, type IntorRawConfig, type IntorResolvedConfig, } from "../../src/config";
@@ -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 @@
1
+ export type { INTOR_GENERATED_KEY, GenConfigKeys, GenConfig, GenMessages, GenLocale, MessageKey, TranslatorInstance, } from "../../src/shared/types";
@@ -0,0 +1 @@
1
+ export { Link, usePathname, useRouter, redirect, } from "../../src/adapters/next/navigation";
@@ -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, useConfig, useLocale, useTranslator, T, getClientLocale, } from "../../src/client/react";
@@ -0,0 +1 @@
1
+ export { intor, type IntorResult, loadMessages, isValidMessages, type Messages, type MessagesReader, getTranslator, clearLoggerPool, clearMessagesPool, setGlobalMessagesPool, loadLocalMessagesFromUrl, } from "../../src/server";
@@ -0,0 +1,26 @@
1
+ import type { GenConfigKeys, GenLocale } from "../../../shared/types/generated";
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<CK extends GenConfigKeys = "__default__"> extends Omit<NextLinkProps, "href">, Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "href"> {
6
+ href?: Url;
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>;
13
+ }
14
+ /**
15
+ * Locale-aware Link component.
16
+ *
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.
24
+ */
25
+ export declare const Link: <CK extends GenConfigKeys = "__default__">({ href, locale, children, onClick, ...props }: LinkProps<CK>) => React.JSX.Element;
26
+ export {};
@@ -0,0 +1,18 @@
1
+ import type { IntorResolvedConfig } from "../../../config";
2
+ import type { GenConfigKeys, GenLocale } from "../../../shared/types/generated";
3
+ import type { RedirectType } from "next/navigation";
4
+ /**
5
+ * Locale-aware redirect helper (server-only).
6
+ *
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
12
+ */
13
+ export declare const redirect: <CK extends GenConfigKeys = "__default__">({ config, locale, url, type, }: {
14
+ config: IntorResolvedConfig;
15
+ locale?: GenLocale<CK>;
16
+ url: string;
17
+ type?: RedirectType | undefined;
18
+ }) => Promise<undefined>;
@@ -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
  };
@@ -0,0 +1,25 @@
1
+ import type { GenConfigKeys, GenLocale } from "../../../shared/types/generated";
2
+ import type { NavigateOptions, PrefetchOptions } from "next/dist/shared/lib/app-router-context.shared-runtime";
3
+ /**
4
+ * Locale-aware router hook.
5
+ *
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
11
+ */
12
+ export declare const useRouter: () => {
13
+ back(): void;
14
+ forward(): void;
15
+ refresh(): void;
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>;
21
+ }) => void;
22
+ prefetch: <CK extends GenConfigKeys = "__default__">(href: string, options?: PrefetchOptions & {
23
+ locale?: GenLocale<CK>;
24
+ }) => void;
25
+ };
@@ -0,0 +1 @@
1
+ export { intorProxy } from "./intor-proxy";
@@ -0,0 +1,13 @@
1
+ import type { IntorResolvedConfig } from "../../../config";
2
+ import type { NextRequest } from "next/server";
3
+ /**
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
12
+ */
13
+ export declare const intorProxy: (config: IntorResolvedConfig, request: NextRequest) => Promise<Response>;
@@ -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 {};
@@ -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>>;
@@ -1,19 +1,17 @@
1
1
  import type { IntorResolvedConfig } from "../../../config/types/intor-config.types";
2
2
  import type { MessagesReader } from "../../../server";
3
- import type { GenConfigKeys, GenMessages, IfGen } from "../../../shared/types/generated.types";
4
- import type { TranslatorInstance } from "../../../shared/types/translator-instance.types";
5
- import type { LocalizedNodeKeys, TranslateHandlers } from "intor-translator";
3
+ import type { GenConfigKeys, GenMessages, IfGen } from "../../../shared/types/generated";
4
+ import type { TranslatorInstance } from "../../../shared/types/translator-instance";
5
+ import type { LocalizedNodeKeys, TranslateHandlers, TranslateHook, TranslatorPlugin } from "intor-translator";
6
6
  /**
7
- * Create a translator instance ready for the current Next.js SSR environment.
7
+ * Create a translator instance for the current Next.js SSR environment.
8
8
  *
9
- * - **Automatically resolves the current locale and pathname using the Next.js adapter.**
10
- * - Loads messages using the provided config, locale, and pathname.
11
- * - Initializes a translator with `t`, `hasKey`, and optional scoped methods.
12
- * - Supports optional `preKey` to create a scoped translator for nested keys.
9
+ * - Automatically resolves the current locale using the Next.js adapter.
13
10
  */
14
11
  export declare function getTranslator<CK extends GenConfigKeys = "__default__">(options: {
15
12
  config: IntorResolvedConfig;
16
13
  handlers?: TranslateHandlers;
14
+ plugins?: (TranslatorPlugin | TranslateHook)[];
17
15
  extraOptions?: {
18
16
  exts?: string[];
19
17
  messagesReader?: MessagesReader;
@@ -22,6 +20,7 @@ export declare function getTranslator<CK extends GenConfigKeys = "__default__">(
22
20
  export declare function getTranslator<CK extends GenConfigKeys = "__default__", PK extends string = LocalizedNodeKeys<GenMessages<CK>>>(options: {
23
21
  config: IntorResolvedConfig;
24
22
  handlers?: TranslateHandlers;
23
+ plugins?: (TranslatorPlugin | TranslateHook)[];
25
24
  extraOptions?: {
26
25
  exts?: string[];
27
26
  messagesReader?: MessagesReader;
@@ -0,0 +1,2 @@
1
+ export { getLocale } from "./get-locale";
2
+ export { getTranslator } from "./get-translator";
@@ -0,0 +1,11 @@
1
+ import type { IntorResolvedConfig } from "../../config";
2
+ /**
3
+ * Resolve the locale in a client-only environment.
4
+ *
5
+ * This helper is intended for pure CSR setups (e.g. Vite).
6
+ *
7
+ * For framework-based apps, prefer `useTranslator()`.
8
+ *
9
+ * - Client-side only
10
+ */
11
+ export declare function getClientLocale(config: IntorResolvedConfig): string;
@@ -0,0 +1 @@
1
+ export { getClientLocale } from "./get-client-locale";
@@ -0,0 +1,2 @@
1
+ import type { ConfigProviderProps } from "./types";
2
+ export declare function ConfigProvider({ value: { config }, children, }: ConfigProviderProps): import("react/jsx-runtime").JSX.Element;
@@ -1,10 +1,11 @@
1
1
  import type { IntorResolvedConfig } from "../../../../config/types/intor-config.types";
2
2
  import type * as React from "react";
3
- export type ConfigContextValue = {
4
- config: IntorResolvedConfig;
5
- pathname: string;
6
- };
7
3
  export type ConfigProviderProps = {
8
- value: ConfigContextValue;
4
+ value: {
5
+ config: IntorResolvedConfig;
6
+ };
9
7
  children: React.ReactNode;
10
8
  };
9
+ export type ConfigContextValue = {
10
+ config: IntorResolvedConfig;
11
+ };
@@ -0,0 +1,6 @@
1
+ export { IntorProvider, type IntorProviderProps } from "./intor-provider";
2
+ export { ConfigProvider, useConfig } from "./config";
3
+ export { LocaleProvider, useLocale } from "./locale";
4
+ export { MessagesProvider, useMessages } from "./messages";
5
+ export { TranslatorProvider, useTranslator } from "./translator";
6
+ export { TranslatorRuntimeProvider, type TranslatorRuntimeProviderProps, useTranslatorRuntime, } from "./translator-runtime";
@@ -0,0 +1,2 @@
1
+ import type { IntorProviderProps } from "./types";
2
+ export declare const IntorProvider: ({ value: { config, initialLocale, messages, onLocaleChange, isLoading, }, children, }: IntorProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,11 +1,10 @@
1
1
  import type { IntorResolvedConfig } from "../../../../config/types/intor-config.types";
2
+ import type { Locale, LocaleMessages } from "intor-translator";
2
3
  import type * as React from "react";
3
- import { type Locale, type LocaleMessages } from "intor-translator";
4
4
  export interface IntorProviderProps {
5
5
  value: {
6
6
  config: IntorResolvedConfig;
7
7
  initialLocale: Locale;
8
- pathname?: string;
9
8
  messages?: Readonly<LocaleMessages>;
10
9
  onLocaleChange?: (newLocale: string) => Promise<void> | void;
11
10
  isLoading?: boolean;