intor 2.3.6 → 2.3.8

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 (373) hide show
  1. package/dist/core/export/config/index.js +2 -0
  2. package/dist/core/export/index.js +8 -4
  3. package/dist/core/export/server/index.js +1 -4
  4. package/dist/core/src/config/define-intor-config.js +5 -2
  5. package/dist/core/src/config/resolvers/resolve-cache-options.js +2 -1
  6. package/dist/core/src/config/resolvers/resolve-cookie-options.js +2 -1
  7. package/dist/core/src/config/resolvers/resolve-routing-options.js +7 -2
  8. package/dist/core/src/config/validators/validate-default-locale.js +3 -1
  9. package/dist/core/src/config/validators/validate-supported-locales.js +8 -4
  10. package/dist/{react/src/server → core/src/core}/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +11 -11
  11. package/dist/core/src/{server → core}/messages/load-remote-messages/load-remote-messages.js +13 -15
  12. package/dist/core/src/core/utils/resolve-loader-options.js +25 -0
  13. package/dist/core/src/server/helpers/local-messages-from-url.js +12 -6
  14. package/dist/core/src/server/intor/intor.js +11 -7
  15. package/dist/core/src/server/messages/load-local-messages/load-local-messages.js +16 -16
  16. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +5 -3
  17. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +7 -5
  18. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +2 -2
  19. package/dist/core/src/server/messages/load-messages.js +28 -22
  20. package/dist/core/src/server/translator/get-translator.js +10 -15
  21. package/dist/next/src/adapters/next/navigation/link.js +1 -12
  22. package/dist/next/src/adapters/next/navigation/redirect.js +4 -8
  23. package/dist/next/src/adapters/next/navigation/use-pathname.js +6 -4
  24. package/dist/next/src/adapters/next/navigation/use-router.js +4 -14
  25. package/dist/next/src/adapters/next/proxy/intor-proxy.js +5 -2
  26. package/dist/next/src/adapters/next/server/get-locale.js +4 -1
  27. package/dist/next/src/adapters/next/server/get-translator.js +9 -3
  28. package/dist/next/src/core/error/intor-error.js +9 -0
  29. package/dist/next/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +11 -11
  30. package/dist/next/src/{server → core}/messages/load-remote-messages/load-remote-messages.js +13 -15
  31. package/dist/next/src/core/utils/resolve-loader-options.js +25 -0
  32. package/dist/next/src/routing/pathname/resolve-pathname.js +4 -1
  33. package/dist/next/src/routing/resolve-routing.js +6 -3
  34. package/dist/next/src/server/messages/load-local-messages/load-local-messages.js +16 -16
  35. package/dist/next/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +5 -3
  36. package/dist/next/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +7 -5
  37. package/dist/next/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +2 -2
  38. package/dist/next/src/server/messages/load-messages.js +28 -22
  39. package/dist/next/src/server/translator/get-translator.js +10 -15
  40. package/dist/react/export/react/index.js +5 -15
  41. package/dist/react/src/client/helpers/get-client-locale.js +4 -1
  42. package/dist/react/src/client/react/helpers/use-load-messages.js +46 -0
  43. package/dist/{next → react}/src/client/react/navigation/use-navigation-strategy.js +11 -7
  44. package/dist/{next → react}/src/client/react/navigation/use-navigation-target.js +6 -3
  45. package/dist/react/src/client/react/provider/effects/use-locale-effects.js +14 -0
  46. package/dist/react/src/client/react/provider/effects/use-messages-effects.js +24 -0
  47. package/dist/react/src/client/react/provider/intor-provider.js +70 -0
  48. package/dist/react/src/client/react/provider/use-intor.js +11 -0
  49. package/dist/react/src/client/react/render/create-react-renderer.js +2 -2
  50. package/dist/react/src/client/react/translator/use-translator.js +9 -20
  51. package/dist/react/src/client/shared/messages/create-refetch-messages.js +61 -0
  52. package/dist/react/src/core/constants/prefix-placeholder.js +4 -0
  53. package/dist/react/src/core/error/intor-error.js +9 -0
  54. package/dist/{core/src/server → react/src/core}/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +11 -11
  55. package/dist/react/src/{server → core}/messages/load-remote-messages/load-remote-messages.js +13 -15
  56. package/dist/react/src/core/utils/is-external-destination.js +11 -0
  57. package/dist/react/src/core/utils/normalizers/normalize-pathname.js +43 -0
  58. package/dist/react/src/core/utils/pathname/get-unprefixed-pathname.js +39 -0
  59. package/dist/react/src/core/utils/pathname/locale-prefix-pathname.js +38 -0
  60. package/dist/react/src/core/utils/pathname/localize-pathname.js +36 -0
  61. package/dist/react/src/core/utils/pathname/standardize-pathname.js +30 -0
  62. package/dist/react/src/core/utils/resolve-loader-options.js +32 -0
  63. package/dist/{next → react}/src/routing/resolve-navigation-target.js +5 -2
  64. package/dist/svelte/export/svelte/index.js +6 -0
  65. package/dist/svelte/src/client/helpers/get-client-locale.js +27 -0
  66. package/dist/svelte/src/client/shared/messages/create-refetch-messages.js +61 -0
  67. package/dist/svelte/src/client/shared/utils/locale/detect-browser-locale.js +12 -0
  68. package/dist/svelte/src/client/shared/utils/locale/get-locale-cookie-browser.js +16 -0
  69. package/dist/svelte/src/client/shared/utils/locale/set-document-locale.js +12 -0
  70. package/dist/svelte/src/client/svelte/runtime/create-intor.js +70 -0
  71. package/dist/svelte/src/client/svelte/runtime/effects/locale-effects.js +19 -0
  72. package/dist/svelte/src/client/svelte/runtime/effects/messages-effects.js +23 -0
  73. package/dist/svelte/src/core/error/intor-error.js +9 -0
  74. package/dist/svelte/src/core/logger/get-logger.js +39 -0
  75. package/dist/svelte/src/core/logger/global-logger-pool.js +8 -0
  76. package/dist/svelte/src/core/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +55 -0
  77. package/dist/svelte/src/core/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +25 -0
  78. package/dist/svelte/src/core/messages/load-remote-messages/load-remote-messages.js +108 -0
  79. package/dist/svelte/src/core/messages/utils/is-valid-messages.js +36 -0
  80. package/dist/svelte/src/core/utils/deep-merge.js +31 -0
  81. package/dist/svelte/src/core/utils/normalizers/normalize-cache-key.js +45 -0
  82. package/dist/svelte/src/core/utils/normalizers/normalize-locale.js +59 -0
  83. package/dist/svelte/src/core/utils/resolve-loader-options.js +32 -0
  84. package/dist/types/export/index.d.ts +1 -3
  85. package/dist/types/export/internal/index.d.ts +1 -1
  86. package/dist/types/export/react/index.d.ts +4 -1
  87. package/dist/types/export/server/index.d.ts +1 -1
  88. package/dist/types/export/svelte/index.d.ts +1 -0
  89. package/dist/types/export/vue/index.d.ts +1 -0
  90. package/dist/types/src/adapters/next/navigation/link.d.ts +1 -1
  91. package/dist/types/src/adapters/next/navigation/redirect.d.ts +1 -1
  92. package/dist/types/src/adapters/next/navigation/use-router.d.ts +1 -1
  93. package/dist/types/src/adapters/next/proxy/utils/set-locale-cookie-edge.d.ts +1 -1
  94. package/dist/types/src/adapters/next/server/get-locale.d.ts +2 -2
  95. package/dist/types/src/adapters/next/server/get-translator.d.ts +9 -24
  96. package/dist/types/src/client/react/helpers/index.d.ts +1 -0
  97. package/dist/types/src/client/react/helpers/use-load-messages.d.ts +10 -0
  98. package/dist/types/src/client/react/index.d.ts +2 -1
  99. package/dist/types/src/client/react/navigation/use-navigation-strategy.d.ts +1 -1
  100. package/dist/types/src/client/react/navigation/use-navigation-target.d.ts +1 -1
  101. package/dist/types/src/client/react/provider/effects/use-locale-effects.d.ts +3 -0
  102. package/dist/types/src/client/react/provider/effects/use-messages-effects.d.ts +4 -0
  103. package/dist/types/src/client/react/{contexts/intor-provider → provider}/index.d.ts +1 -0
  104. package/dist/types/src/client/react/provider/intor-provider.d.ts +5 -0
  105. package/dist/types/src/client/react/provider/types.d.ts +22 -0
  106. package/dist/types/src/client/react/provider/use-intor.d.ts +2 -0
  107. package/dist/types/src/client/react/render/create-react-renderer.d.ts +1 -0
  108. package/dist/types/src/client/react/translator/create-t-rich.d.ts +1 -1
  109. package/dist/types/src/client/react/translator/t.d.ts +2 -2
  110. package/dist/types/src/client/react/translator/translator-instance.d.ts +12 -8
  111. package/dist/types/src/client/react/translator/use-translator.d.ts +3 -3
  112. package/dist/types/src/client/shared/messages/create-refetch-messages.d.ts +18 -0
  113. package/dist/types/src/client/shared/messages/index.d.ts +1 -0
  114. package/dist/types/src/client/shared/types/bootstrap.d.ts +16 -0
  115. package/dist/types/src/client/shared/types/index.d.ts +1 -1
  116. package/dist/types/src/client/shared/utils/build-cookie-string.d.ts +1 -1
  117. package/dist/types/src/client/shared/utils/locale/set-locale-cookie-browser.d.ts +1 -1
  118. package/dist/types/src/client/svelte/helpers/create-messages.d.ts +11 -0
  119. package/dist/types/src/client/svelte/helpers/index.d.ts +1 -0
  120. package/dist/types/src/client/svelte/index.d.ts +3 -0
  121. package/dist/types/src/client/svelte/runtime/create-intor.d.ts +13 -0
  122. package/dist/types/src/client/svelte/runtime/effects/locale-effects.d.ts +11 -0
  123. package/dist/types/src/client/svelte/runtime/effects/messages-effects.d.ts +9 -0
  124. package/dist/types/src/client/svelte/runtime/index.d.ts +1 -0
  125. package/dist/types/src/client/svelte/runtime/types.d.ts +9 -0
  126. package/dist/types/src/client/vue/helpers/index.d.ts +1 -0
  127. package/dist/types/src/client/vue/helpers/use-load-messages.d.ts +11 -0
  128. package/dist/types/src/client/vue/index.d.ts +4 -0
  129. package/dist/types/src/client/vue/provider/effects/use-locale-effects.d.ts +4 -0
  130. package/dist/types/src/client/vue/provider/effects/use-messages-effects.d.ts +11 -0
  131. package/dist/types/src/client/vue/provider/index.d.ts +2 -0
  132. package/dist/types/src/client/vue/provider/inject.d.ts +3 -0
  133. package/dist/types/src/client/vue/provider/intor-provider.d.ts +4 -0
  134. package/dist/types/src/client/vue/provider/types.d.ts +18 -0
  135. package/dist/types/src/client/vue/render/create-vue-renderer.d.ts +18 -0
  136. package/dist/types/src/client/vue/render/index.d.ts +2 -0
  137. package/dist/types/src/client/vue/render/render-rich-message-react.d.ts +13 -0
  138. package/dist/types/src/client/vue/render/types.d.ts +15 -0
  139. package/dist/types/src/client/vue/translator/create-t-rich.d.ts +16 -0
  140. package/dist/types/src/client/vue/translator/index.d.ts +2 -0
  141. package/dist/types/src/client/vue/translator/t.d.ts +38 -0
  142. package/dist/types/src/client/vue/translator/translator-instance.d.ts +16 -0
  143. package/dist/types/src/client/vue/translator/use-translator.d.ts +8 -0
  144. package/dist/types/src/config/constants/cache.d.ts +2 -0
  145. package/dist/types/src/config/constants/cookie.d.ts +2 -0
  146. package/dist/types/src/config/constants/index.d.ts +3 -0
  147. package/dist/types/src/config/constants/routing.d.ts +2 -0
  148. package/dist/types/src/config/define-intor-config.d.ts +1 -1
  149. package/dist/types/src/config/index.d.ts +2 -1
  150. package/dist/types/src/config/resolvers/resolve-cache-options.d.ts +1 -1
  151. package/dist/types/src/config/resolvers/resolve-cookie-options.d.ts +1 -1
  152. package/dist/types/src/config/resolvers/resolve-fallback-locales.d.ts +1 -1
  153. package/dist/types/src/config/resolvers/resolve-routing-options.d.ts +1 -1
  154. package/dist/types/src/config/types/index.d.ts +7 -0
  155. package/dist/types/src/config/types/{intor-config.types.d.ts → intor-config.d.ts} +28 -24
  156. package/dist/types/src/config/types/{loader.types.d.ts → loader.d.ts} +15 -12
  157. package/dist/types/src/config/types/{logger.types.d.ts → logger.d.ts} +1 -0
  158. package/dist/types/src/config/types/{routing.types.d.ts → routing.d.ts} +1 -1
  159. package/dist/types/src/config/types/translator.d.ts +7 -0
  160. package/dist/types/src/config/validators/validate-default-locale.d.ts +1 -1
  161. package/dist/types/src/config/validators/validate-supported-locales.d.ts +1 -1
  162. package/dist/types/src/core/index.d.ts +6 -0
  163. package/dist/types/src/{server/shared → core}/logger/get-logger.d.ts +3 -4
  164. package/dist/types/src/core/logger/index.d.ts +2 -0
  165. package/dist/types/src/core/messages/index.d.ts +4 -0
  166. package/dist/types/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.d.ts +1 -1
  167. package/dist/types/src/core/messages/load-remote-messages/fetch-locale-messages/types.d.ts +12 -0
  168. package/dist/types/src/core/messages/load-remote-messages/index.d.ts +1 -0
  169. package/dist/types/src/{server → core}/messages/load-remote-messages/load-remote-messages.d.ts +1 -1
  170. package/dist/types/src/core/messages/load-remote-messages/types.d.ts +15 -0
  171. package/dist/types/src/{server/messages/shared → core/messages}/types.d.ts +8 -5
  172. package/dist/types/src/{server/messages/shared → core/messages}/utils/is-valid-messages.d.ts +1 -1
  173. package/dist/types/src/{shared → core}/types/generated.d.ts +1 -1
  174. package/dist/types/src/core/types/index.d.ts +3 -0
  175. package/dist/types/src/{shared → core}/types/translator-instance.d.ts +2 -6
  176. package/dist/types/src/{shared → core}/utils/index.d.ts +2 -0
  177. package/dist/types/src/{shared → core}/utils/locale/get-locale-from-pathname.d.ts +1 -1
  178. package/dist/types/src/{shared → core}/utils/locale/get-locale-from-query.d.ts +1 -1
  179. package/dist/types/src/{shared → core}/utils/pathname/get-unprefixed-pathname.d.ts +1 -1
  180. package/dist/types/src/{shared → core}/utils/pathname/locale-prefix-pathname.d.ts +1 -1
  181. package/dist/types/src/{shared → core}/utils/pathname/localize-pathname.d.ts +1 -1
  182. package/dist/types/src/{shared → core}/utils/pathname/standardize-pathname.d.ts +1 -1
  183. package/dist/types/src/core/utils/resolve-loader-options.d.ts +21 -0
  184. package/dist/types/src/routing/index.d.ts +2 -0
  185. package/dist/types/src/routing/locale/resolve-locale.d.ts +1 -1
  186. package/dist/types/src/routing/locale/types.d.ts +1 -1
  187. package/dist/types/src/routing/pathname/resolve-pathname.d.ts +1 -1
  188. package/dist/types/src/routing/pathname/types.d.ts +1 -1
  189. package/dist/types/src/routing/resolve-navigation-target.d.ts +1 -1
  190. package/dist/types/src/routing/resolve-routing.d.ts +1 -1
  191. package/dist/types/src/server/helpers/index.d.ts +1 -1
  192. package/dist/types/src/server/helpers/local-messages-from-url.d.ts +15 -5
  193. package/dist/types/src/server/index.d.ts +3 -5
  194. package/dist/types/src/server/intor/intor.d.ts +4 -4
  195. package/dist/types/src/server/intor/types.d.ts +4 -4
  196. package/dist/types/src/server/messages/index.d.ts +0 -2
  197. package/dist/types/src/server/messages/load-local-messages/index.d.ts +1 -1
  198. package/dist/types/src/server/messages/load-local-messages/load-local-messages.d.ts +1 -1
  199. package/dist/types/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.d.ts +2 -2
  200. package/dist/types/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/types.d.ts +5 -7
  201. package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.d.ts +1 -1
  202. package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/types.d.ts +5 -7
  203. package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.d.ts +1 -1
  204. package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.d.ts +1 -1
  205. package/dist/types/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.d.ts +2 -2
  206. package/dist/types/src/server/messages/load-local-messages/read-locale-messages/types.d.ts +6 -8
  207. package/dist/types/src/server/messages/load-local-messages/types.d.ts +9 -16
  208. package/dist/types/src/server/messages/load-messages.d.ts +3 -3
  209. package/dist/types/src/server/messages/types.d.ts +11 -5
  210. package/dist/types/src/server/translator/get-translator.d.ts +11 -19
  211. package/dist/types/src/server/translator/index.d.ts +2 -1
  212. package/dist/types/src/server/translator/translator-instance.d.ts +8 -0
  213. package/dist/vue/export/vue/index.js +6 -0
  214. package/dist/vue/src/client/helpers/get-client-locale.js +27 -0
  215. package/dist/vue/src/client/shared/messages/create-refetch-messages.js +61 -0
  216. package/dist/vue/src/client/shared/utils/build-cookie-string.js +30 -0
  217. package/dist/vue/src/client/shared/utils/locale/detect-browser-locale.js +12 -0
  218. package/dist/vue/src/client/shared/utils/locale/get-locale-cookie-browser.js +16 -0
  219. package/dist/vue/src/client/shared/utils/locale/set-document-locale.js +12 -0
  220. package/dist/vue/src/client/shared/utils/locale/set-locale-cookie-browser.js +18 -0
  221. package/dist/vue/src/client/vue/helpers/use-load-messages.js +44 -0
  222. package/dist/vue/src/client/vue/provider/effects/use-locale-effects.js +13 -0
  223. package/dist/vue/src/client/vue/provider/effects/use-messages-effects.js +36 -0
  224. package/dist/vue/src/client/vue/provider/inject.js +11 -0
  225. package/dist/vue/src/client/vue/provider/intor-provider.js +79 -0
  226. package/dist/vue/src/client/vue/render/create-vue-renderer.js +36 -0
  227. package/dist/vue/src/client/vue/render/render-rich-message-react.js +19 -0
  228. package/dist/vue/src/client/vue/translator/create-t-rich.js +26 -0
  229. package/dist/vue/src/client/vue/translator/t.js +32 -0
  230. package/dist/vue/src/client/vue/translator/use-translator.js +28 -0
  231. package/dist/vue/src/core/error/intor-error.js +9 -0
  232. package/dist/vue/src/core/logger/get-logger.js +39 -0
  233. package/dist/vue/src/core/logger/global-logger-pool.js +8 -0
  234. package/dist/vue/src/core/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +55 -0
  235. package/dist/vue/src/core/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +25 -0
  236. package/dist/vue/src/core/messages/load-remote-messages/load-remote-messages.js +108 -0
  237. package/dist/vue/src/core/messages/utils/is-valid-messages.js +36 -0
  238. package/dist/vue/src/core/utils/deep-merge.js +31 -0
  239. package/dist/vue/src/core/utils/normalizers/normalize-cache-key.js +45 -0
  240. package/dist/vue/src/core/utils/normalizers/normalize-locale.js +59 -0
  241. package/dist/vue/src/core/utils/resolve-loader-options.js +32 -0
  242. package/package.json +16 -6
  243. package/dist/next/src/client/react/contexts/config/context.js +0 -3
  244. package/dist/next/src/client/react/contexts/locale/context.js +0 -3
  245. package/dist/next/src/client/react/contexts/messages/context.js +0 -3
  246. package/dist/next/src/client/react/contexts/translator/context.js +0 -3
  247. package/dist/next/src/client/react/contexts/translator-runtime/context.js +0 -3
  248. package/dist/next/src/config/constants/cache.constants.js +0 -7
  249. package/dist/react/src/client/react/contexts/config/context.js +0 -5
  250. package/dist/react/src/client/react/contexts/config/hook.js +0 -11
  251. package/dist/react/src/client/react/contexts/config/provider.js +0 -14
  252. package/dist/react/src/client/react/contexts/intor-provider/intor-provider.js +0 -17
  253. package/dist/react/src/client/react/contexts/locale/context.js +0 -5
  254. package/dist/react/src/client/react/contexts/locale/hook.js +0 -11
  255. package/dist/react/src/client/react/contexts/locale/provider.js +0 -38
  256. package/dist/react/src/client/react/contexts/locale/utils/change-locale.js +0 -26
  257. package/dist/react/src/client/react/contexts/messages/context.js +0 -5
  258. package/dist/react/src/client/react/contexts/messages/hook.js +0 -11
  259. package/dist/react/src/client/react/contexts/messages/provider.js +0 -39
  260. package/dist/react/src/client/react/contexts/messages/utils/use-refetch-messages.js +0 -70
  261. package/dist/react/src/client/react/contexts/translator/context.js +0 -5
  262. package/dist/react/src/client/react/contexts/translator/hook.js +0 -11
  263. package/dist/react/src/client/react/contexts/translator/provider.js +0 -58
  264. package/dist/react/src/client/react/contexts/translator-runtime/context.js +0 -5
  265. package/dist/react/src/client/react/contexts/translator-runtime/hook.js +0 -9
  266. package/dist/react/src/client/react/contexts/translator-runtime/provider.js +0 -15
  267. package/dist/react/src/config/constants/cache.constants.js +0 -7
  268. package/dist/react/src/server/shared/messages/global-messages-pool.js +0 -10
  269. package/dist/types/src/client/react/contexts/config/context.d.ts +0 -3
  270. package/dist/types/src/client/react/contexts/config/hook.d.ts +0 -2
  271. package/dist/types/src/client/react/contexts/config/index.d.ts +0 -2
  272. package/dist/types/src/client/react/contexts/config/provider.d.ts +0 -2
  273. package/dist/types/src/client/react/contexts/config/types.d.ts +0 -11
  274. package/dist/types/src/client/react/contexts/index.d.ts +0 -6
  275. package/dist/types/src/client/react/contexts/intor-provider/intor-provider.d.ts +0 -2
  276. package/dist/types/src/client/react/contexts/intor-provider/types.d.ts +0 -13
  277. package/dist/types/src/client/react/contexts/locale/context.d.ts +0 -3
  278. package/dist/types/src/client/react/contexts/locale/hook.d.ts +0 -1
  279. package/dist/types/src/client/react/contexts/locale/index.d.ts +0 -2
  280. package/dist/types/src/client/react/contexts/locale/provider.d.ts +0 -3
  281. package/dist/types/src/client/react/contexts/locale/types.d.ts +0 -13
  282. package/dist/types/src/client/react/contexts/locale/utils/change-locale.d.ts +0 -20
  283. package/dist/types/src/client/react/contexts/messages/context.d.ts +0 -3
  284. package/dist/types/src/client/react/contexts/messages/hook.d.ts +0 -2
  285. package/dist/types/src/client/react/contexts/messages/index.d.ts +0 -2
  286. package/dist/types/src/client/react/contexts/messages/provider.d.ts +0 -3
  287. package/dist/types/src/client/react/contexts/messages/types.d.ts +0 -12
  288. package/dist/types/src/client/react/contexts/messages/utils/use-refetch-messages.d.ts +0 -20
  289. package/dist/types/src/client/react/contexts/translator/context.d.ts +0 -3
  290. package/dist/types/src/client/react/contexts/translator/hook.d.ts +0 -2
  291. package/dist/types/src/client/react/contexts/translator/index.d.ts +0 -2
  292. package/dist/types/src/client/react/contexts/translator/provider.d.ts +0 -2
  293. package/dist/types/src/client/react/contexts/translator/types.d.ts +0 -11
  294. package/dist/types/src/client/react/contexts/translator-runtime/context.d.ts +0 -3
  295. package/dist/types/src/client/react/contexts/translator-runtime/hook.d.ts +0 -2
  296. package/dist/types/src/client/react/contexts/translator-runtime/index.d.ts +0 -3
  297. package/dist/types/src/client/react/contexts/translator-runtime/provider.d.ts +0 -2
  298. package/dist/types/src/client/react/contexts/translator-runtime/types.d.ts +0 -13
  299. package/dist/types/src/client/shared/types/translator-instance.d.ts +0 -11
  300. package/dist/types/src/config/constants/cache.constants.d.ts +0 -2
  301. package/dist/types/src/config/constants/cookie.constants.d.ts +0 -2
  302. package/dist/types/src/config/constants/routing.constants.d.ts +0 -2
  303. package/dist/types/src/config/types/translator.types.d.ts +0 -7
  304. package/dist/types/src/server/messages/load-remote-messages/fetch-locale-messages/types.d.ts +0 -14
  305. package/dist/types/src/server/messages/load-remote-messages/index.d.ts +0 -2
  306. package/dist/types/src/server/messages/load-remote-messages/types.d.ts +0 -21
  307. package/dist/types/src/shared/types/index.d.ts +0 -2
  308. /package/dist/core/src/config/constants/{cache.constants.js → cache.js} +0 -0
  309. /package/dist/core/src/config/constants/{cookie.constants.js → cookie.js} +0 -0
  310. /package/dist/core/src/config/constants/{routing.constants.js → routing.js} +0 -0
  311. /package/dist/core/src/{shared → core}/constants/prefix-placeholder.js +0 -0
  312. /package/dist/core/src/{shared → core}/error/intor-error.js +0 -0
  313. /package/dist/core/src/{server/shared → core}/logger/get-logger.js +0 -0
  314. /package/dist/core/src/{server/shared → core}/logger/global-logger-pool.js +0 -0
  315. /package/dist/core/src/{server/shared → core}/messages/global-messages-pool.js +0 -0
  316. /package/dist/core/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +0 -0
  317. /package/dist/core/src/{server/messages/shared → core/messages}/utils/is-valid-messages.js +0 -0
  318. /package/dist/core/src/{shared → core}/utils/deep-merge.js +0 -0
  319. /package/dist/core/src/{shared → core}/utils/normalizers/normalize-cache-key.js +0 -0
  320. /package/dist/core/src/{shared → core}/utils/normalizers/normalize-pathname.js +0 -0
  321. /package/dist/core/src/{shared → core}/utils/pathname/get-unprefixed-pathname.js +0 -0
  322. /package/dist/core/src/{shared → core}/utils/pathname/locale-prefix-pathname.js +0 -0
  323. /package/dist/core/src/{shared → core}/utils/pathname/localize-pathname.js +0 -0
  324. /package/dist/core/src/{shared → core}/utils/pathname/standardize-pathname.js +0 -0
  325. /package/dist/next/src/{shared → core}/constants/prefix-placeholder.js +0 -0
  326. /package/dist/next/src/{server/shared → core}/logger/get-logger.js +0 -0
  327. /package/dist/next/src/{server/shared → core}/logger/global-logger-pool.js +0 -0
  328. /package/dist/next/src/{server/shared → core}/messages/global-messages-pool.js +0 -0
  329. /package/dist/next/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +0 -0
  330. /package/dist/next/src/{server/messages/shared → core/messages}/utils/is-valid-messages.js +0 -0
  331. /package/dist/next/src/{shared → core}/utils/deep-merge.js +0 -0
  332. /package/dist/next/src/{shared → core}/utils/is-external-destination.js +0 -0
  333. /package/dist/next/src/{shared → core}/utils/locale/get-locale-from-accept-language.js +0 -0
  334. /package/dist/next/src/{shared → core}/utils/locale/get-locale-from-host.js +0 -0
  335. /package/dist/next/src/{shared → core}/utils/locale/get-locale-from-pathname.js +0 -0
  336. /package/dist/next/src/{shared → core}/utils/locale/get-locale-from-query.js +0 -0
  337. /package/dist/next/src/{shared → core}/utils/normalizers/normalize-cache-key.js +0 -0
  338. /package/dist/next/src/{shared → core}/utils/normalizers/normalize-locale.js +0 -0
  339. /package/dist/next/src/{shared → core}/utils/normalizers/normalize-pathname.js +0 -0
  340. /package/dist/next/src/{shared → core}/utils/pathname/get-unprefixed-pathname.js +0 -0
  341. /package/dist/next/src/{shared → core}/utils/pathname/locale-prefix-pathname.js +0 -0
  342. /package/dist/next/src/{shared → core}/utils/pathname/localize-pathname.js +0 -0
  343. /package/dist/next/src/{shared → core}/utils/pathname/standardize-pathname.js +0 -0
  344. /package/dist/react/src/{server/shared → core}/logger/get-logger.js +0 -0
  345. /package/dist/react/src/{server/shared → core}/logger/global-logger-pool.js +0 -0
  346. /package/dist/react/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +0 -0
  347. /package/dist/react/src/{server/messages/shared → core/messages}/utils/is-valid-messages.js +0 -0
  348. /package/dist/react/src/{shared → core}/utils/deep-merge.js +0 -0
  349. /package/dist/react/src/{shared → core}/utils/normalizers/normalize-cache-key.js +0 -0
  350. /package/dist/react/src/{shared → core}/utils/normalizers/normalize-locale.js +0 -0
  351. /package/dist/{next → svelte}/src/client/shared/utils/build-cookie-string.js +0 -0
  352. /package/dist/{next → svelte}/src/client/shared/utils/locale/set-locale-cookie-browser.js +0 -0
  353. /package/dist/types/src/config/types/{cache.types.d.ts → cache.d.ts} +0 -0
  354. /package/dist/types/src/config/types/{cookie.types.d.ts → cookie.d.ts} +0 -0
  355. /package/dist/types/src/{shared → core}/constants/index.d.ts +0 -0
  356. /package/dist/types/src/{shared → core}/constants/prefix-placeholder.d.ts +0 -0
  357. /package/dist/types/src/{shared → core}/error/index.d.ts +0 -0
  358. /package/dist/types/src/{shared → core}/error/intor-error.d.ts +0 -0
  359. /package/dist/types/src/{server/shared → core}/logger/global-logger-pool.d.ts +0 -0
  360. /package/dist/types/src/{server/shared → core}/messages/global-messages-pool.d.ts +0 -0
  361. /package/dist/types/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/index.d.ts +0 -0
  362. /package/dist/types/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.d.ts +0 -0
  363. /package/dist/types/src/{shared → core}/types/routing.d.ts +0 -0
  364. /package/dist/types/src/{shared → core}/utils/deep-merge.d.ts +0 -0
  365. /package/dist/types/src/{shared → core}/utils/is-external-destination.d.ts +0 -0
  366. /package/dist/types/src/{shared → core}/utils/locale/get-locale-from-accept-language.d.ts +0 -0
  367. /package/dist/types/src/{shared → core}/utils/locale/get-locale-from-host.d.ts +0 -0
  368. /package/dist/types/src/{shared → core}/utils/locale/index.d.ts +0 -0
  369. /package/dist/types/src/{shared → core}/utils/normalizers/index.d.ts +0 -0
  370. /package/dist/types/src/{shared → core}/utils/normalizers/normalize-cache-key.d.ts +0 -0
  371. /package/dist/types/src/{shared → core}/utils/normalizers/normalize-locale.d.ts +0 -0
  372. /package/dist/types/src/{shared → core}/utils/normalizers/normalize-pathname.d.ts +0 -0
  373. /package/dist/types/src/{shared → core}/utils/pathname/index.d.ts +0 -0
@@ -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,32 @@
1
+ /**
2
+ * Resolve the effective message loader for a given runtime.
3
+ *
4
+ * Loader resolution follows an inheritance-based priority model:
5
+ *
6
+ * - client runtime:
7
+ * client.loader → server.loader → root loader
8
+ *
9
+ * - server runtime:
10
+ * server.loader → root loader
11
+ *
12
+ * This allows the client runtime to inherit server behavior
13
+ * when no explicit client loader is provided.
14
+ *
15
+ * Notes:
16
+ * - Static `messages` are intentionally NOT handled here.
17
+ * - Returning `undefined` indicates that no loader is enabled
18
+ * for the given runtime.
19
+ */
20
+ const resolveLoaderOptions = (config, runtime) => {
21
+ // --- runtime: client ---
22
+ {
23
+ const client = config.client?.loader;
24
+ if (client) {
25
+ // Client loader is always remote by design
26
+ return { type: "remote", ...client };
27
+ }
28
+ return config.server?.loader ?? config.loader;
29
+ }
30
+ };
31
+
32
+ export { resolveLoaderOptions };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intor",
3
- "version": "2.3.6",
3
+ "version": "2.3.8",
4
4
  "description": "A modular and extensible i18n core designed for TypeScript and JavaScript projects. Intor enables custom translation logic with support for both frontend and backend environments, featuring runtime configuration, caching, adapters, and message loaders.",
5
5
  "author": "Yiming Liao",
6
6
  "homepage": "https://github.com/yiming-liao/intor#readme",
@@ -64,6 +64,14 @@
64
64
  "./next/server": {
65
65
  "import": "./dist/next/export/next/server/index.js",
66
66
  "types": "./dist/types/export/next/server/index.d.ts"
67
+ },
68
+ "./vue": {
69
+ "import": "./dist/vue/export/vue/index.js",
70
+ "types": "./dist/types/export/vue/index.d.ts"
71
+ },
72
+ "./svelte": {
73
+ "import": "./dist/svelte/export/svelte/index.js",
74
+ "types": "./dist/types/export/svelte/index.d.ts"
67
75
  }
68
76
  },
69
77
  "main": "./dist/export/index.js",
@@ -89,15 +97,15 @@
89
97
  "examples:html": "vite --config examples/html/vite.config.ts"
90
98
  },
91
99
  "dependencies": {
92
- "intor-translator": "1.3.1",
100
+ "intor-translator": "1.3.2",
93
101
  "keyv": "5.5.5",
94
102
  "logry": "2.1.5",
95
103
  "p-limit": "7.2.0"
96
104
  },
97
105
  "devDependencies": {
98
- "@rollup/plugin-alias": "^6.0.0",
106
+ "@rollup/plugin-alias": "6.0.0",
99
107
  "@rollup/plugin-typescript": "12.3.0",
100
- "@rollup/pluginutils": "^5.3.0",
108
+ "@rollup/pluginutils": "5.3.0",
101
109
  "@testing-library/dom": "10.4.1",
102
110
  "@testing-library/jest-dom": "6.9.1",
103
111
  "@testing-library/react": "16.3.1",
@@ -118,7 +126,7 @@
118
126
  "eslint-plugin-unused-imports": "4.1.4",
119
127
  "jsdom": "27.3.0",
120
128
  "knip": "5.69.1",
121
- "magic-string": "^0.30.21",
129
+ "magic-string": "0.30.21",
122
130
  "next": "16.0.3",
123
131
  "prettier": "3.6.2",
124
132
  "react": "19.0.0",
@@ -126,12 +134,14 @@
126
134
  "remark": "15.0.1",
127
135
  "remark-gfm": "4.0.1",
128
136
  "rollup": "4.53.3",
137
+ "svelte": "5.46.1",
129
138
  "tsc-alias": "1.8.16",
130
139
  "tsd": "0.33.0",
131
140
  "typescript": "5.8.3",
132
141
  "typescript-eslint": "8.32.1",
133
142
  "vite": "7.3.0",
134
143
  "vite-tsconfig-paths": "6.0.3",
135
- "vitest": "4.0.16"
144
+ "vitest": "4.0.16",
145
+ "vue": "3.5.26"
136
146
  }
137
147
  }
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
-
3
- React.createContext(undefined);
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
-
3
- React.createContext(undefined);
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
-
3
- React.createContext(undefined);
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
-
3
- React.createContext(undefined);
@@ -1,3 +0,0 @@
1
- import * as React from 'react';
2
-
3
- React.createContext(undefined);
@@ -1,7 +0,0 @@
1
- // Default cache options
2
- const DEFAULT_CACHE_OPTIONS = {
3
- enabled: process.env.NODE_ENV === "production",
4
- ttl: 60 * 60 * 1000, // 1 hour
5
- };
6
-
7
- export { DEFAULT_CACHE_OPTIONS };
@@ -1,5 +0,0 @@
1
- import * as React from 'react';
2
-
3
- const ConfigContext = React.createContext(undefined);
4
-
5
- export { ConfigContext };
@@ -1,11 +0,0 @@
1
- import * as React from 'react';
2
- import { ConfigContext } from './context.js';
3
-
4
- function useConfig() {
5
- const context = React.useContext(ConfigContext);
6
- if (!context)
7
- throw new Error("useConfig must be used within ConfigProvider");
8
- return context;
9
- }
10
-
11
- export { useConfig };
@@ -1,14 +0,0 @@
1
- "use client";
2
- import { jsx } from 'react/jsx-runtime';
3
- import * as React from 'react';
4
- import { ConfigContext } from './context.js';
5
-
6
- function ConfigProvider({ value: { config }, children, }) {
7
- // context value
8
- const value = React.useMemo(() => ({
9
- config,
10
- }), [config]);
11
- return (jsx(ConfigContext.Provider, { value: value, children: children }));
12
- }
13
-
14
- export { ConfigProvider };
@@ -1,17 +0,0 @@
1
- "use client";
2
- import { jsx } from 'react/jsx-runtime';
3
- import { ConfigProvider } from '../config/provider.js';
4
- import 'react';
5
- import '../config/context.js';
6
- import { LocaleProvider } from '../locale/provider.js';
7
- import '../locale/context.js';
8
- import { MessagesProvider } from '../messages/provider.js';
9
- import '../messages/context.js';
10
- import { TranslatorProvider } from '../translator/provider.js';
11
- import '../translator/context.js';
12
-
13
- const IntorProvider = ({ value: { config, initialLocale, messages = config.messages, onLocaleChange, isLoading, }, children, }) => {
14
- return (jsx(ConfigProvider, { value: { config }, children: jsx(LocaleProvider, { value: { initialLocale, onLocaleChange }, children: jsx(MessagesProvider, { value: { messages }, children: jsx(TranslatorProvider, { value: { isLoading }, children: children }) }) }) }));
15
- };
16
-
17
- export { IntorProvider };
@@ -1,5 +0,0 @@
1
- import * as React from 'react';
2
-
3
- const LocaleContext = React.createContext(undefined);
4
-
5
- export { LocaleContext };
@@ -1,11 +0,0 @@
1
- import * as React from 'react';
2
- import { LocaleContext } from './context.js';
3
-
4
- function useLocale() {
5
- const context = React.useContext(LocaleContext);
6
- if (!context)
7
- throw new Error("useLocale must be used within a LocaleProvider");
8
- return context;
9
- }
10
-
11
- export { useLocale };
@@ -1,38 +0,0 @@
1
- "use client";
2
- import { jsx } from 'react/jsx-runtime';
3
- import * as React from 'react';
4
- import '../config/context.js';
5
- import { useConfig } from '../config/hook.js';
6
- import { setLocaleCookieBrowser } from '../../../shared/utils/locale/set-locale-cookie-browser.js';
7
- import { setDocumentLocale } from '../../../shared/utils/locale/set-document-locale.js';
8
- import { LocaleContext } from './context.js';
9
- import { changeLocale } from './utils/change-locale.js';
10
-
11
- function LocaleProvider({ value: { initialLocale, onLocaleChange }, children, }) {
12
- const { config } = useConfig();
13
- const [locale, setLocaleState] = React.useState(initialLocale);
14
- // Request a locale change.
15
- const setLocale = React.useCallback(async (newLocale) => {
16
- changeLocale({
17
- locale,
18
- newLocale,
19
- fullReloadRequired: config.loader?.type === "local",
20
- setLocaleState,
21
- });
22
- // Notify external listener (fire-and-forget)
23
- onLocaleChange?.(newLocale);
24
- }, [locale, config.loader, onLocaleChange]);
25
- // Sync locale-related browser side effects.
26
- React.useEffect(() => {
27
- setLocaleCookieBrowser(config.cookie, locale);
28
- setDocumentLocale(locale);
29
- }, [config.cookie, locale]);
30
- // context value
31
- const value = React.useMemo(() => ({
32
- locale,
33
- setLocale,
34
- }), [locale, setLocale]);
35
- return (jsx(LocaleContext.Provider, { value: value, children: children }));
36
- }
37
-
38
- export { LocaleProvider };
@@ -1,26 +0,0 @@
1
- /**
2
- * Requests a locale change on the client.
3
- *
4
- * - This function updates the locale state only.
5
- * - Side effects such as cookie persistence, `<html lang>` updates,
6
- * or message refetching are handled by higher-level providers.
7
- *
8
- * Notes:
9
- * - When using a `local` loader, client-side locale switching
10
- * requires a full page reload to load new message bundles.
11
- */
12
- const changeLocale = ({ locale, newLocale, fullReloadRequired, setLocaleState, }) => {
13
- // No-op when locale does not change
14
- if (newLocale === locale)
15
- return;
16
- // Informational warning when a full reload is required
17
- if (fullReloadRequired) {
18
- console.warn(`[Intor] Locale change requested while using a "local" loader. ` +
19
- `Client-side navigation alone will not load new messages. ` +
20
- `Use the provided <Link> wrapper or trigger a full page reload.`);
21
- }
22
- // Update locale state
23
- setLocaleState(newLocale);
24
- };
25
-
26
- export { changeLocale };
@@ -1,5 +0,0 @@
1
- import * as React from 'react';
2
-
3
- const MessagesContext = React.createContext(undefined);
4
-
5
- export { MessagesContext };
@@ -1,11 +0,0 @@
1
- import * as React from 'react';
2
- import { MessagesContext } from './context.js';
3
-
4
- function useMessages() {
5
- const context = React.useContext(MessagesContext);
6
- if (!context)
7
- throw new Error("useMessages must be used within a MessagesProvider");
8
- return context;
9
- }
10
-
11
- export { useMessages };
@@ -1,39 +0,0 @@
1
- "use client";
2
- import { jsx } from 'react/jsx-runtime';
3
- import * as React from 'react';
4
- import '../config/context.js';
5
- import { useConfig } from '../config/hook.js';
6
- import '../locale/context.js';
7
- import { useLocale } from '../locale/hook.js';
8
- import { useRefetchMessages } from './utils/use-refetch-messages.js';
9
- import { MessagesContext } from './context.js';
10
-
11
- function MessagesProvider({ value: { messages = {} }, children, }) {
12
- const { config } = useConfig();
13
- const { locale } = useLocale();
14
- const [runtimeMessages, setRuntimeMessages] = React.useState(null);
15
- const [isLoadingMessages, setIsLoadingMessages] = React.useState(false);
16
- const isInitialRenderRef = React.useRef(true);
17
- // Prepares message refetch function.
18
- const { refetchMessages } = useRefetchMessages({
19
- config,
20
- setRuntimeMessages,
21
- setIsLoadingMessages,
22
- });
23
- // Refetch messages when locale changes (except initial render).
24
- React.useEffect(() => {
25
- if (isInitialRenderRef.current) {
26
- isInitialRenderRef.current = false;
27
- return;
28
- }
29
- refetchMessages(locale);
30
- }, [refetchMessages, locale]);
31
- // context value
32
- const value = React.useMemo(() => ({
33
- messages: runtimeMessages || messages,
34
- isLoading: isLoadingMessages,
35
- }), [runtimeMessages, messages, isLoadingMessages]);
36
- return (jsx(MessagesContext.Provider, { value: value, children: children }));
37
- }
38
-
39
- export { MessagesProvider };
@@ -1,70 +0,0 @@
1
- import * as React from 'react';
2
- import { loadRemoteMessages } from '../../../../../server/messages/load-remote-messages/load-remote-messages.js';
3
- import { deepMerge } from '../../../../../shared/utils/deep-merge.js';
4
-
5
- /**
6
- * Refetch remote locale messages.
7
- *
8
- * This hook ensures that:
9
- * - Only one remote request is active at a time
10
- * - In-flight requests are aborted when a new locale is requested
11
- * - State updates are applied only for the latest request
12
- */
13
- const useRefetchMessages = ({ config, setRuntimeMessages, setIsLoadingMessages, }) => {
14
- const { loader } = config;
15
- // Holds the AbortController for the currently active remote request
16
- const abortControllerRef = React.useRef(null);
17
- // Refetch messages
18
- const refetchMessages = React.useCallback(async (newLocale) => {
19
- if (!loader || loader.type !== "remote")
20
- return;
21
- // Abort any in-flight request
22
- abortControllerRef.current?.abort();
23
- const controller = new AbortController();
24
- abortControllerRef.current = controller;
25
- setIsLoadingMessages(true);
26
- try {
27
- const loadedMessages = await loadRemoteMessages({
28
- locale: newLocale,
29
- fallbackLocales: config.fallbackLocales[newLocale] || [],
30
- namespaces: loader.namespaces,
31
- rootDir: loader.rootDir,
32
- remoteUrl: loader.remoteUrl,
33
- remoteHeaders: loader.remoteHeaders,
34
- extraOptions: {
35
- cacheOptions: config.cache,
36
- loggerOptions: { id: config.id, ...config.logger },
37
- },
38
- signal: controller.signal,
39
- });
40
- // Update state only if this request was not aborted
41
- if (!controller.signal.aborted) {
42
- setRuntimeMessages(deepMerge(config.messages, loadedMessages));
43
- }
44
- }
45
- finally {
46
- // Clear loading state only if this is still the active request
47
- if (abortControllerRef.current === controller) {
48
- setIsLoadingMessages(false);
49
- }
50
- }
51
- }, [
52
- loader,
53
- config.id,
54
- config.messages,
55
- config.fallbackLocales,
56
- config.logger,
57
- config.cache,
58
- setRuntimeMessages,
59
- setIsLoadingMessages,
60
- ]);
61
- // Abort in-flight request on unmount
62
- React.useEffect(() => {
63
- return () => {
64
- abortControllerRef.current?.abort();
65
- };
66
- }, []);
67
- return { refetchMessages };
68
- };
69
-
70
- export { useRefetchMessages };
@@ -1,5 +0,0 @@
1
- import * as React from 'react';
2
-
3
- const TranslatorContext = React.createContext(undefined);
4
-
5
- export { TranslatorContext };
@@ -1,11 +0,0 @@
1
- import * as React from 'react';
2
- import { TranslatorContext } from './context.js';
3
-
4
- function useTranslator() {
5
- const context = React.useContext(TranslatorContext);
6
- if (!context)
7
- throw new Error("useTranslator must be used within IntorTranslatorProvider");
8
- return context;
9
- }
10
-
11
- export { useTranslator };
@@ -1,58 +0,0 @@
1
- "use client";
2
- import { jsx } from 'react/jsx-runtime';
3
- import { Translator } from 'intor-translator';
4
- import * as React from 'react';
5
- import '../config/context.js';
6
- import { useConfig } from '../config/hook.js';
7
- import '../locale/context.js';
8
- import { useLocale } from '../locale/hook.js';
9
- import '../../../../config/constants/cache.constants.js';
10
- import 'logry';
11
- import 'keyv';
12
- import '../messages/context.js';
13
- import { useMessages } from '../messages/hook.js';
14
- import '../translator-runtime/context.js';
15
- import { useTranslatorRuntime } from '../translator-runtime/hook.js';
16
- import { TranslatorContext } from './context.js';
17
-
18
- function TranslatorProvider({ value: { isLoading: externalIsLoading } = {}, children, }) {
19
- const { config } = useConfig();
20
- const { messages, isLoading: internalIsLoading } = useMessages();
21
- const { locale } = useLocale();
22
- const runtime = useTranslatorRuntime();
23
- // Treat locale changes as a loading boundary to avoid transient missing states.
24
- // isLoading defaults to false, but is eagerly set to true on locale switches.
25
- const prevLocaleRef = React.useRef(locale);
26
- // eslint-disable-next-line react-hooks/refs -- intentional render-time read to detect locale switches
27
- const localeChanged = prevLocaleRef.current !== locale;
28
- React.useEffect(() => {
29
- prevLocaleRef.current = locale;
30
- }, [locale]);
31
- const isLoading = !!externalIsLoading || internalIsLoading || localeChanged;
32
- // context value
33
- const value = React.useMemo(() => {
34
- const translator = new Translator({
35
- messages,
36
- locale,
37
- isLoading,
38
- fallbackLocales: config.fallbackLocales,
39
- loadingMessage: config.translator?.loadingMessage,
40
- placeholder: config.translator?.placeholder,
41
- handlers: runtime?.handlers,
42
- plugins: runtime?.plugins,
43
- });
44
- return { translator };
45
- }, [
46
- messages,
47
- locale,
48
- isLoading,
49
- config.fallbackLocales,
50
- config.translator?.loadingMessage,
51
- config.translator?.placeholder,
52
- runtime?.handlers,
53
- runtime?.plugins,
54
- ]);
55
- return (jsx(TranslatorContext.Provider, { value: value, children: children }));
56
- }
57
-
58
- export { TranslatorProvider };
@@ -1,5 +0,0 @@
1
- import * as React from 'react';
2
-
3
- const TranslatorRuntimeContext = React.createContext(undefined);
4
-
5
- export { TranslatorRuntimeContext };
@@ -1,9 +0,0 @@
1
- import * as React from 'react';
2
- import { TranslatorRuntimeContext } from './context.js';
3
-
4
- function useTranslatorRuntime() {
5
- const context = React.useContext(TranslatorRuntimeContext);
6
- return context;
7
- }
8
-
9
- export { useTranslatorRuntime };
@@ -1,15 +0,0 @@
1
- "use client";
2
- import { jsx } from 'react/jsx-runtime';
3
- import * as React from 'react';
4
- import { TranslatorRuntimeContext } from './context.js';
5
-
6
- const TranslatorRuntimeProvider = ({ value: { handlers, plugins }, children, }) => {
7
- // context value
8
- const value = React.useMemo(() => ({
9
- handlers,
10
- plugins,
11
- }), [handlers, plugins]);
12
- return (jsx(TranslatorRuntimeContext.Provider, { value: value, children: children }));
13
- };
14
-
15
- export { TranslatorRuntimeProvider };
@@ -1,7 +0,0 @@
1
- // Default cache options
2
- const DEFAULT_CACHE_OPTIONS = {
3
- enabled: process.env.NODE_ENV === "production",
4
- ttl: 60 * 60 * 1000, // 1 hour
5
- };
6
-
7
- export { DEFAULT_CACHE_OPTIONS };
@@ -1,10 +0,0 @@
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 };
@@ -1,3 +0,0 @@
1
- import type { ConfigContextValue } from "./types";
2
- import * as React from "react";
3
- export declare const ConfigContext: React.Context<ConfigContextValue | undefined>;
@@ -1,2 +0,0 @@
1
- import type { ConfigContextValue } from "./types";
2
- export declare function useConfig(): ConfigContextValue;
@@ -1,2 +0,0 @@
1
- export { ConfigProvider } from "./provider";
2
- export { useConfig } from "./hook";
@@ -1,2 +0,0 @@
1
- import type { ConfigProviderProps } from "./types";
2
- export declare function ConfigProvider({ value: { config }, children, }: ConfigProviderProps): import("react/jsx-runtime").JSX.Element;