intor 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/dist/core/export/index.js +1 -0
  4. package/dist/core/src/client/shared/helpers/get-client-locale.js +5 -20
  5. package/dist/core/src/client/shared/utils/locale/detect-browser-locale.js +2 -8
  6. package/dist/core/src/client/shared/utils/locale/get-locale-from-cookie.js +5 -12
  7. package/dist/core/src/config/constants/cookie.js +9 -9
  8. package/dist/core/src/config/constants/routing.js +13 -14
  9. package/dist/core/src/config/define-intor-config.js +28 -44
  10. package/dist/core/src/config/resolvers/resolve-cookie-options.js +4 -4
  11. package/dist/core/src/config/resolvers/resolve-fallback-locales.js +33 -50
  12. package/dist/core/src/config/resolvers/resolve-routing-options.js +32 -61
  13. package/dist/core/src/config/validators/validate-default-locale.js +8 -13
  14. package/dist/core/src/config/validators/validate-id.js +8 -13
  15. package/dist/core/src/config/validators/validate-supported-locales.js +8 -13
  16. package/dist/core/src/core/constants/locale-placeholder.js +0 -1
  17. package/dist/core/src/core/error/intor-error.js +14 -29
  18. package/dist/core/src/core/locale/canonicalize-locale.js +7 -18
  19. package/dist/core/src/core/locale/match-locale.js +24 -50
  20. package/dist/core/src/core/locale/parse-locale.js +12 -22
  21. package/dist/core/src/core/logger/get-logger.js +26 -31
  22. package/dist/core/src/core/logger/global-logger-pool.js +4 -4
  23. package/dist/core/src/core/messages/internal-metadata.js +1 -1
  24. package/dist/core/src/core/messages/load-remote-messages/collect-remote-resources.js +13 -22
  25. package/dist/core/src/core/messages/load-remote-messages/fetch-remote-resource.js +30 -39
  26. package/dist/core/src/core/messages/load-remote-messages/load-remote-messages.js +72 -89
  27. package/dist/core/src/core/messages/load-remote-messages/resolve-remote-resources.js +7 -17
  28. package/dist/core/src/core/messages/merge-messages.js +17 -28
  29. package/dist/core/src/core/messages/utils/is-valid-messages.js +22 -37
  30. package/dist/core/src/core/messages/utils/nest-object-from-path.js +5 -17
  31. package/dist/core/src/core/render/create-html-renderer.js +29 -37
  32. package/dist/core/src/core/render/utils/escape-html.js +1 -6
  33. package/dist/core/src/core/render/utils/render-attributes.js +6 -11
  34. package/dist/core/src/core/translator/create-t-rich.js +6 -15
  35. package/dist/core/src/core/translator/create-translator.js +16 -24
  36. package/dist/core/src/core/utils/deep-merge.js +24 -42
  37. package/dist/core/src/core/utils/normalizers/normalize-cache-key.js +14 -40
  38. package/dist/core/src/core/utils/normalizers/normalize-pathname.js +19 -37
  39. package/dist/core/src/core/utils/normalizers/normalize-query.js +6 -20
  40. package/dist/core/src/core/utils/parse-cookie-header.js +11 -18
  41. package/dist/core/src/core/utils/resolve-loader-options.js +6 -32
  42. package/dist/core/src/edge/helpers/get-translator.js +14 -20
  43. package/dist/core/src/edge/translator/init-translator.js +23 -31
  44. package/dist/core/src/routing/inbound/helpers/resolve-inbound-from-request.js +21 -28
  45. package/dist/core/src/routing/inbound/resolve-inbound.js +22 -37
  46. package/dist/core/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  47. package/dist/core/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  48. package/dist/core/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  49. package/dist/core/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  50. package/dist/core/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  51. package/dist/core/src/routing/locale/get-locale-from-accept-language.js +21 -36
  52. package/dist/core/src/routing/locale/get-locale-from-host.js +5 -28
  53. package/dist/core/src/routing/locale/get-locale-from-pathname.js +11 -37
  54. package/dist/core/src/routing/locale/get-locale-from-query.js +2 -17
  55. package/dist/core/src/routing/pathname/canonicalize-pathname.js +25 -67
  56. package/dist/core/src/routing/pathname/localize-pathname.js +12 -30
  57. package/dist/core/src/routing/pathname/materialize-pathname.js +9 -44
  58. package/dist/core/src/routing/pathname/standardize-pathname.js +6 -30
  59. package/dist/core/src/server/helpers/get-translator.js +26 -23
  60. package/dist/core/src/server/intor/intor.js +20 -25
  61. package/dist/core/src/server/messages/load-local-messages/cache/messages-pool.js +4 -7
  62. package/dist/core/src/server/messages/load-local-messages/load-local-messages.js +76 -92
  63. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +59 -80
  64. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +53 -87
  65. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.js +3 -6
  66. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +23 -35
  67. package/dist/core/src/server/messages/load-messages.js +56 -69
  68. package/dist/core/src/server/translator/init-translator.js +28 -30
  69. package/dist/express/src/adapters/express/create-intor-handler.js +35 -46
  70. package/dist/express/src/adapters/express/get-translator.js +2 -9
  71. package/dist/express/src/core/constants/locale-placeholder.js +0 -1
  72. package/dist/express/src/core/locale/canonicalize-locale.js +7 -18
  73. package/dist/express/src/core/locale/match-locale.js +24 -50
  74. package/dist/express/src/core/locale/parse-locale.js +12 -22
  75. package/dist/express/src/core/utils/normalizers/normalize-pathname.js +19 -37
  76. package/dist/express/src/core/utils/normalizers/normalize-query.js +6 -20
  77. package/dist/express/src/core/utils/parse-cookie-header.js +11 -18
  78. package/dist/express/src/routing/inbound/resolve-inbound.js +22 -37
  79. package/dist/express/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  80. package/dist/express/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  81. package/dist/express/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  82. package/dist/express/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  83. package/dist/express/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  84. package/dist/express/src/routing/locale/get-locale-from-accept-language.js +21 -36
  85. package/dist/express/src/routing/locale/get-locale-from-host.js +5 -28
  86. package/dist/express/src/routing/locale/get-locale-from-pathname.js +11 -37
  87. package/dist/express/src/routing/locale/get-locale-from-query.js +2 -17
  88. package/dist/express/src/routing/pathname/canonicalize-pathname.js +25 -67
  89. package/dist/express/src/routing/pathname/localize-pathname.js +12 -30
  90. package/dist/express/src/routing/pathname/materialize-pathname.js +9 -44
  91. package/dist/express/src/routing/pathname/standardize-pathname.js +6 -30
  92. package/dist/fastify/src/adapters/fastify/create-intor-handler.js +35 -47
  93. package/dist/fastify/src/adapters/fastify/get-translator.js +2 -9
  94. package/dist/fastify/src/adapters/fastify/intor-fastify-plugin.js +29 -38
  95. package/dist/fastify/src/core/constants/locale-placeholder.js +0 -1
  96. package/dist/fastify/src/core/locale/canonicalize-locale.js +7 -18
  97. package/dist/fastify/src/core/locale/match-locale.js +24 -50
  98. package/dist/fastify/src/core/locale/parse-locale.js +12 -22
  99. package/dist/fastify/src/core/utils/normalizers/normalize-pathname.js +19 -37
  100. package/dist/fastify/src/core/utils/normalizers/normalize-query.js +6 -20
  101. package/dist/fastify/src/core/utils/parse-cookie-header.js +11 -18
  102. package/dist/fastify/src/routing/inbound/resolve-inbound.js +22 -37
  103. package/dist/fastify/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  104. package/dist/fastify/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  105. package/dist/fastify/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  106. package/dist/fastify/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  107. package/dist/fastify/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  108. package/dist/fastify/src/routing/locale/get-locale-from-accept-language.js +21 -36
  109. package/dist/fastify/src/routing/locale/get-locale-from-host.js +5 -28
  110. package/dist/fastify/src/routing/locale/get-locale-from-pathname.js +11 -37
  111. package/dist/fastify/src/routing/locale/get-locale-from-query.js +2 -17
  112. package/dist/fastify/src/routing/pathname/canonicalize-pathname.js +25 -67
  113. package/dist/fastify/src/routing/pathname/localize-pathname.js +12 -30
  114. package/dist/fastify/src/routing/pathname/materialize-pathname.js +9 -44
  115. package/dist/fastify/src/routing/pathname/standardize-pathname.js +6 -30
  116. package/dist/hono/src/adapters/hono/create-intor-handler.js +33 -44
  117. package/dist/hono/src/adapters/hono/get-translator.js +2 -9
  118. package/dist/hono/src/core/constants/locale-placeholder.js +0 -1
  119. package/dist/hono/src/core/locale/canonicalize-locale.js +7 -18
  120. package/dist/hono/src/core/locale/match-locale.js +24 -50
  121. package/dist/hono/src/core/locale/parse-locale.js +12 -22
  122. package/dist/hono/src/core/utils/normalizers/normalize-pathname.js +19 -37
  123. package/dist/hono/src/core/utils/normalizers/normalize-query.js +6 -20
  124. package/dist/hono/src/core/utils/parse-cookie-header.js +11 -18
  125. package/dist/hono/src/routing/inbound/resolve-inbound.js +22 -37
  126. package/dist/hono/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  127. package/dist/hono/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  128. package/dist/hono/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  129. package/dist/hono/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  130. package/dist/hono/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  131. package/dist/hono/src/routing/locale/get-locale-from-accept-language.js +21 -36
  132. package/dist/hono/src/routing/locale/get-locale-from-host.js +5 -28
  133. package/dist/hono/src/routing/locale/get-locale-from-pathname.js +11 -37
  134. package/dist/hono/src/routing/locale/get-locale-from-query.js +2 -17
  135. package/dist/hono/src/routing/pathname/canonicalize-pathname.js +25 -67
  136. package/dist/hono/src/routing/pathname/localize-pathname.js +12 -30
  137. package/dist/hono/src/routing/pathname/materialize-pathname.js +9 -44
  138. package/dist/hono/src/routing/pathname/standardize-pathname.js +6 -30
  139. package/dist/next/export/next/server/index.js +1 -0
  140. package/dist/next/src/adapters/next/create-intor-handler.js +39 -48
  141. package/dist/next/src/adapters/next/header-keys.js +9 -0
  142. package/dist/next/src/adapters/next/link.js +33 -28
  143. package/dist/next/src/adapters/next/redirect.js +12 -15
  144. package/dist/next/src/adapters/next/server/get-locale.js +13 -24
  145. package/dist/next/src/adapters/next/server/get-translator.js +2 -9
  146. package/dist/next/src/adapters/next/server/intor.js +5 -13
  147. package/dist/next/src/adapters/next/server/read-intor-url-state.js +13 -0
  148. package/dist/next/src/adapters/next/use-router.js +47 -66
  149. package/dist/next/src/client/shared/navigation/execute-navigation.js +20 -38
  150. package/dist/next/src/client/shared/utils/build-cookie-string.js +18 -27
  151. package/dist/next/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  152. package/dist/next/src/core/constants/locale-placeholder.js +0 -1
  153. package/dist/next/src/core/locale/canonicalize-locale.js +7 -18
  154. package/dist/next/src/core/locale/match-locale.js +24 -50
  155. package/dist/next/src/core/locale/parse-locale.js +12 -22
  156. package/dist/next/src/core/utils/normalizers/normalize-pathname.js +19 -37
  157. package/dist/next/src/core/utils/normalizers/normalize-query.js +6 -20
  158. package/dist/next/src/core/utils/resolve-loader-options.js +6 -29
  159. package/dist/next/src/policies/shoud-full-reload.js +2 -5
  160. package/dist/next/src/policies/should-sync-locale.js +1 -4
  161. package/dist/next/src/routing/inbound/resolve-inbound.js +24 -39
  162. package/dist/next/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  163. package/dist/next/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  164. package/dist/next/src/routing/inbound/resolve-pathname/strategies/all.js +13 -29
  165. package/dist/next/src/routing/inbound/resolve-pathname/strategies/except-default.js +14 -30
  166. package/dist/next/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  167. package/dist/next/src/routing/locale/get-locale-from-accept-language.js +21 -36
  168. package/dist/next/src/routing/locale/get-locale-from-host.js +5 -28
  169. package/dist/next/src/routing/locale/get-locale-from-pathname.js +11 -37
  170. package/dist/next/src/routing/locale/get-locale-from-query.js +2 -17
  171. package/dist/next/src/routing/outbound/decide-strategy.js +9 -9
  172. package/dist/next/src/routing/outbound/determine-target.js +28 -44
  173. package/dist/next/src/routing/outbound/resolve-outbound.js +12 -16
  174. package/dist/next/src/routing/outbound/utils/derive-host-destination.js +5 -9
  175. package/dist/next/src/routing/outbound/utils/derive-query-destination.js +4 -7
  176. package/dist/next/src/routing/outbound/utils/is-external-destination.js +1 -7
  177. package/dist/next/src/routing/pathname/canonicalize-pathname.js +25 -67
  178. package/dist/next/src/routing/pathname/localize-pathname.js +12 -30
  179. package/dist/next/src/routing/pathname/materialize-pathname.js +9 -44
  180. package/dist/next/src/routing/pathname/standardize-pathname.js +6 -30
  181. package/dist/react/src/client/react/helpers/use-intor.js +25 -44
  182. package/dist/react/src/client/react/provider/effects/use-locale-effects.js +20 -25
  183. package/dist/react/src/client/react/provider/effects/use-messages-effects.js +17 -16
  184. package/dist/react/src/client/react/provider/intor-provider.js +63 -66
  185. package/dist/react/src/client/react/provider/use-intor-context.js +4 -4
  186. package/dist/react/src/client/react/render/create-react-renderer.js +18 -24
  187. package/dist/react/src/client/react/translator/create-t-rich.js +9 -22
  188. package/dist/react/src/client/react/translator/use-translator.js +11 -16
  189. package/dist/react/src/client/shared/messages/create-refetch-messages.js +41 -51
  190. package/dist/react/src/client/shared/provider/effective-state.js +2 -6
  191. package/dist/react/src/client/shared/utils/build-cookie-string.js +18 -27
  192. package/dist/react/src/client/shared/utils/locale/get-locale-from-cookie.js +5 -12
  193. package/dist/react/src/client/shared/utils/locale/set-document-locale.js +2 -8
  194. package/dist/react/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  195. package/dist/react/src/core/logger/get-logger.js +26 -31
  196. package/dist/react/src/core/logger/global-logger-pool.js +4 -4
  197. package/dist/react/src/core/messages/load-remote-messages/collect-remote-resources.js +13 -22
  198. package/dist/react/src/core/messages/load-remote-messages/fetch-remote-resource.js +30 -39
  199. package/dist/react/src/core/messages/load-remote-messages/load-remote-messages.js +72 -89
  200. package/dist/react/src/core/messages/load-remote-messages/resolve-remote-resources.js +7 -17
  201. package/dist/react/src/core/messages/merge-messages.js +17 -28
  202. package/dist/react/src/core/messages/utils/is-valid-messages.js +22 -37
  203. package/dist/react/src/core/messages/utils/nest-object-from-path.js +5 -17
  204. package/dist/react/src/core/utils/deep-merge.js +24 -42
  205. package/dist/react/src/core/utils/resolve-loader-options.js +6 -29
  206. package/dist/react/src/policies/should-persist-on-first-visit.js +1 -4
  207. package/dist/svelte/export/svelte/index.js +0 -6
  208. package/dist/svelte/src/client/shared/messages/create-refetch-messages.js +41 -51
  209. package/dist/svelte/src/client/shared/provider/effective-state.js +2 -6
  210. package/dist/svelte/src/client/shared/utils/build-cookie-string.js +18 -27
  211. package/dist/svelte/src/client/shared/utils/locale/get-locale-from-cookie.js +5 -12
  212. package/dist/svelte/src/client/shared/utils/locale/set-document-locale.js +2 -8
  213. package/dist/svelte/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  214. package/dist/svelte/src/client/svelte/provider/create-intor-store.js +59 -63
  215. package/dist/svelte/src/client/svelte/provider/effects/attach-locale-effects.js +20 -25
  216. package/dist/svelte/src/client/svelte/provider/effects/attach-messages-effects.js +21 -18
  217. package/dist/svelte/src/client/svelte/provider/get-intor-context.js +4 -4
  218. package/dist/svelte/src/client/svelte/translator/use-translator.js +11 -16
  219. package/dist/svelte/src/core/logger/get-logger.js +26 -31
  220. package/dist/svelte/src/core/logger/global-logger-pool.js +4 -4
  221. package/dist/svelte/src/core/messages/load-remote-messages/collect-remote-resources.js +13 -22
  222. package/dist/svelte/src/core/messages/load-remote-messages/fetch-remote-resource.js +30 -39
  223. package/dist/svelte/src/core/messages/load-remote-messages/load-remote-messages.js +72 -89
  224. package/dist/svelte/src/core/messages/load-remote-messages/resolve-remote-resources.js +7 -17
  225. package/dist/svelte/src/core/messages/merge-messages.js +17 -28
  226. package/dist/svelte/src/core/messages/utils/is-valid-messages.js +22 -37
  227. package/dist/svelte/src/core/messages/utils/nest-object-from-path.js +5 -17
  228. package/dist/svelte/src/core/render/create-html-renderer.js +29 -37
  229. package/dist/svelte/src/core/render/utils/escape-html.js +1 -6
  230. package/dist/svelte/src/core/render/utils/render-attributes.js +6 -11
  231. package/dist/svelte/src/core/translator/create-t-rich.js +6 -15
  232. package/dist/svelte/src/core/utils/deep-merge.js +24 -42
  233. package/dist/svelte/src/core/utils/resolve-loader-options.js +6 -29
  234. package/dist/svelte/src/policies/should-persist-on-first-visit.js +1 -4
  235. package/dist/svelte-kit/src/adapters/svelte-kit/create-intor-handler.js +37 -57
  236. package/dist/svelte-kit/src/adapters/svelte-kit/use-navigation.js +29 -27
  237. package/dist/svelte-kit/src/adapters/svelte-kit/utils/is-svelte-kit-ssg.js +4 -11
  238. package/dist/svelte-kit/src/client/shared/navigation/execute-navigation.js +19 -37
  239. package/dist/svelte-kit/src/client/shared/utils/build-cookie-string.js +18 -27
  240. package/dist/svelte-kit/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  241. package/dist/svelte-kit/src/core/constants/locale-placeholder.js +0 -1
  242. package/dist/svelte-kit/src/core/locale/canonicalize-locale.js +7 -18
  243. package/dist/svelte-kit/src/core/locale/match-locale.js +24 -50
  244. package/dist/svelte-kit/src/core/locale/parse-locale.js +12 -22
  245. package/dist/svelte-kit/src/core/utils/normalizers/normalize-pathname.js +19 -37
  246. package/dist/svelte-kit/src/core/utils/normalizers/normalize-query.js +6 -20
  247. package/dist/svelte-kit/src/core/utils/resolve-loader-options.js +6 -29
  248. package/dist/svelte-kit/src/policies/shoud-full-reload.js +2 -5
  249. package/dist/svelte-kit/src/policies/should-sync-locale.js +1 -4
  250. package/dist/svelte-kit/src/routing/inbound/resolve-inbound.js +22 -37
  251. package/dist/svelte-kit/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  252. package/dist/svelte-kit/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  253. package/dist/svelte-kit/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  254. package/dist/svelte-kit/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  255. package/dist/svelte-kit/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  256. package/dist/svelte-kit/src/routing/locale/get-locale-from-accept-language.js +21 -36
  257. package/dist/svelte-kit/src/routing/locale/get-locale-from-host.js +5 -28
  258. package/dist/svelte-kit/src/routing/locale/get-locale-from-pathname.js +11 -37
  259. package/dist/svelte-kit/src/routing/locale/get-locale-from-query.js +2 -17
  260. package/dist/svelte-kit/src/routing/outbound/decide-strategy.js +9 -9
  261. package/dist/svelte-kit/src/routing/outbound/determine-target.js +28 -44
  262. package/dist/svelte-kit/src/routing/outbound/resolve-outbound.js +12 -16
  263. package/dist/svelte-kit/src/routing/outbound/utils/derive-host-destination.js +5 -9
  264. package/dist/svelte-kit/src/routing/outbound/utils/derive-query-destination.js +4 -7
  265. package/dist/svelte-kit/src/routing/outbound/utils/is-external-destination.js +1 -7
  266. package/dist/svelte-kit/src/routing/pathname/canonicalize-pathname.js +25 -67
  267. package/dist/svelte-kit/src/routing/pathname/localize-pathname.js +12 -30
  268. package/dist/svelte-kit/src/routing/pathname/materialize-pathname.js +9 -44
  269. package/dist/svelte-kit/src/routing/pathname/standardize-pathname.js +6 -30
  270. package/dist/types/export/index.d.ts +1 -1
  271. package/dist/types/export/index.d.ts.map +1 -1
  272. package/dist/types/export/next/server/index.d.ts +1 -1
  273. package/dist/types/export/next/server/index.d.ts.map +1 -1
  274. package/dist/types/src/adapters/fastify/intor-fastify-plugin.d.ts.map +1 -1
  275. package/dist/types/src/adapters/next/create-intor-handler.d.ts.map +1 -1
  276. package/dist/types/src/{core/constants/headers.d.ts → adapters/next/header-keys.d.ts} +3 -2
  277. package/dist/types/src/adapters/next/header-keys.d.ts.map +1 -0
  278. package/dist/types/src/adapters/next/server/get-locale.d.ts.map +1 -1
  279. package/dist/types/src/adapters/next/server/index.d.ts +1 -0
  280. package/dist/types/src/adapters/next/server/index.d.ts.map +1 -1
  281. package/dist/types/src/adapters/next/server/read-intor-url-state.d.ts +13 -0
  282. package/dist/types/src/adapters/next/server/read-intor-url-state.d.ts.map +1 -0
  283. package/dist/types/src/core/constants/index.d.ts +0 -1
  284. package/dist/types/src/core/constants/index.d.ts.map +1 -1
  285. package/dist/types/src/core/constants/locale-placeholder.d.ts +5 -0
  286. package/dist/types/src/core/constants/locale-placeholder.d.ts.map +1 -1
  287. package/dist/types/src/core/index.d.ts +1 -1
  288. package/dist/types/src/core/index.d.ts.map +1 -1
  289. package/dist/types/src/edge/translator/init-translator.d.ts.map +1 -1
  290. package/dist/types/src/routing/outbound/decide-strategy.d.ts +1 -1
  291. package/dist/types/src/routing/outbound/decide-strategy.d.ts.map +1 -1
  292. package/dist/types/src/server/translator/init-translator.d.ts.map +1 -1
  293. package/dist/vue/src/client/shared/messages/create-refetch-messages.js +41 -51
  294. package/dist/vue/src/client/shared/provider/effective-state.js +2 -6
  295. package/dist/vue/src/client/shared/utils/build-cookie-string.js +18 -27
  296. package/dist/vue/src/client/shared/utils/locale/get-locale-from-cookie.js +5 -12
  297. package/dist/vue/src/client/shared/utils/locale/set-document-locale.js +2 -8
  298. package/dist/vue/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  299. package/dist/vue/src/client/vue/helpers/use-intor.js +20 -42
  300. package/dist/vue/src/client/vue/provider/effects/use-locale-effects.js +23 -24
  301. package/dist/vue/src/client/vue/provider/effects/use-messages-effects.js +15 -24
  302. package/dist/vue/src/client/vue/provider/inject-intor-context.js +4 -4
  303. package/dist/vue/src/client/vue/provider/intor-provider.js +61 -66
  304. package/dist/vue/src/client/vue/render/create-vue-renderer.js +18 -24
  305. package/dist/vue/src/client/vue/translator/create-t-rich.js +5 -17
  306. package/dist/vue/src/client/vue/translator/trans.js +24 -31
  307. package/dist/vue/src/client/vue/translator/use-translator.js +12 -17
  308. package/dist/vue/src/core/logger/get-logger.js +26 -31
  309. package/dist/vue/src/core/logger/global-logger-pool.js +4 -4
  310. package/dist/vue/src/core/messages/load-remote-messages/collect-remote-resources.js +13 -22
  311. package/dist/vue/src/core/messages/load-remote-messages/fetch-remote-resource.js +30 -39
  312. package/dist/vue/src/core/messages/load-remote-messages/load-remote-messages.js +72 -89
  313. package/dist/vue/src/core/messages/load-remote-messages/resolve-remote-resources.js +7 -17
  314. package/dist/vue/src/core/messages/merge-messages.js +17 -28
  315. package/dist/vue/src/core/messages/utils/is-valid-messages.js +22 -37
  316. package/dist/vue/src/core/messages/utils/nest-object-from-path.js +5 -17
  317. package/dist/vue/src/core/utils/deep-merge.js +24 -42
  318. package/dist/vue/src/core/utils/resolve-loader-options.js +6 -29
  319. package/dist/vue/src/policies/should-persist-on-first-visit.js +1 -4
  320. package/package.json +53 -65
  321. package/dist/next/src/core/constants/headers.js +0 -8
  322. package/dist/types/src/core/constants/headers.d.ts.map +0 -1
@@ -1,21 +1,9 @@
1
- /**
2
- * Wraps a value inside nested objects according to a given path.
3
- *
4
- * @example
5
- * ```ts
6
- * const value = { a: "A" };
7
- *
8
- * nestObjectFromPath(["auth", "verify"], value); // → { auth: { verify: { a: "A" } } }
9
- *
10
- * nestObjectFromPath([], value); // → { a: "A" }
11
- * ```
12
- */
13
1
  function nestObjectFromPath(path, value) {
14
- let obj = value;
15
- for (let i = path.length - 1; i >= 0; i--) {
16
- obj = { [path[i]]: obj };
17
- }
18
- return obj;
2
+ let obj = value;
3
+ for (let i = path.length - 1; i >= 0; i--) {
4
+ obj = { [path[i]]: obj };
5
+ }
6
+ return obj;
19
7
  }
20
8
 
21
9
  export { nestObjectFromPath };
@@ -1,44 +1,36 @@
1
1
  import { escapeHtml } from './utils/escape-html.js';
2
2
  import { renderAttributes } from './utils/render-attributes.js';
3
3
 
4
- /**
5
- * Create an HTML string renderer for semantic rich messages.
6
- *
7
- * - Transforms semantic rich AST nodes into escaped HTML strings.
8
- * - Can be used in any HTML-based environment.
9
- *
10
- * This renderer is intentionally minimal and stateless.
11
- */
12
4
  const createHtmlRenderer = (tagRenderers) => {
13
- return {
14
- /** Render plain text nodes */
15
- text(value) {
16
- return escapeHtml(value);
17
- },
18
- /** Render semantic tag nodes */
19
- tag(name, attributes, children) {
20
- const tagRenderer = tagRenderers?.[name];
21
- if (tagRenderer) {
22
- return typeof tagRenderer === "function"
23
- ? tagRenderer(children)
24
- : tagRenderer;
25
- }
26
- // Default behavior: render as native HTML tag
27
- return `<${name}${renderAttributes(attributes)}>${children.join("")}</${name}>`;
28
- },
29
- /** Render raw (non-tokenized) message values as escaped HTML strings */
30
- raw(value) {
31
- if (value == null)
32
- return "";
33
- if (typeof value === "string" || typeof value === "number") {
34
- return escapeHtml(String(value));
35
- }
36
- if (Array.isArray(value)) {
37
- return value.map((v) => escapeHtml(String(v))).join("");
38
- }
39
- throw new Error("[intor] HTML renderer cannot render raw non-primitive values.");
40
- },
41
- };
5
+ return {
6
+ /** Render plain text nodes */
7
+ text(value) {
8
+ return escapeHtml(value);
9
+ },
10
+ /** Render semantic tag nodes */
11
+ tag(name, attributes, children) {
12
+ const tagRenderer = tagRenderers?.[name];
13
+ if (tagRenderer) {
14
+ return typeof tagRenderer === "function" ? tagRenderer(children) : tagRenderer;
15
+ }
16
+ return `<${name}${renderAttributes(attributes)}>${children.join(
17
+ ""
18
+ )}</${name}>`;
19
+ },
20
+ /** Render raw (non-tokenized) message values as escaped HTML strings */
21
+ raw(value) {
22
+ if (value == null) return "";
23
+ if (typeof value === "string" || typeof value === "number") {
24
+ return escapeHtml(String(value));
25
+ }
26
+ if (Array.isArray(value)) {
27
+ return value.map((v) => escapeHtml(String(v))).join("");
28
+ }
29
+ throw new Error(
30
+ "[intor] HTML renderer cannot render raw non-primitive values."
31
+ );
32
+ }
33
+ };
42
34
  };
43
35
 
44
36
  export { createHtmlRenderer };
@@ -1,10 +1,5 @@
1
1
  function escapeHtml(value) {
2
- return value
3
- .replaceAll("&", "&amp;")
4
- .replaceAll("<", "&lt;")
5
- .replaceAll(">", "&gt;")
6
- .replaceAll('"', "&quot;")
7
- .replaceAll("'", "&#39;");
2
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
8
3
  }
9
4
 
10
5
  export { escapeHtml };
@@ -1,17 +1,12 @@
1
1
  import { escapeHtml } from './escape-html.js';
2
2
 
3
3
  function renderAttributes(attributes) {
4
- if (!attributes)
5
- return "";
6
- return Object.entries(attributes)
7
- .map(([key, value]) => {
8
- if (value === true)
9
- return ` ${key}`;
10
- if (value == null)
11
- return "";
12
- return ` ${key}="${escapeHtml(String(value))}"`;
13
- })
14
- .join("");
4
+ if (!attributes) return "";
5
+ return Object.entries(attributes).map(([key, value]) => {
6
+ if (value === true) return ` ${key}`;
7
+ if (value == null) return "";
8
+ return ` ${key}="${escapeHtml(String(value))}"`;
9
+ }).join("");
15
10
  }
16
11
 
17
12
  export { renderAttributes };
@@ -1,22 +1,13 @@
1
1
  import { renderRichMessage } from 'intor-translator';
2
2
  import { createHtmlRenderer } from '../render/create-html-renderer.js';
3
3
 
4
- /**
5
- * Create an HTML-string rich translation function.
6
- *
7
- * - Resolves translated messages via `translator.t`
8
- * - Renders semantic rich tags into escaped HTML strings
9
- * - Supports optional scoped keys via `preKey`
10
- *
11
- * Can be used in any HTML-based environment (Astro, Svelte, SSR, etc.).
12
- */
13
4
  const createTRich = (t) => {
14
- return (key, tagRenderers, replacements) => {
15
- const message = t(key, replacements);
16
- const renderer = createHtmlRenderer(tagRenderers);
17
- const nodes = renderRichMessage(message, renderer);
18
- return nodes.join("");
19
- };
5
+ return (key, tagRenderers, replacements) => {
6
+ const message = t(key, replacements);
7
+ const renderer = createHtmlRenderer(tagRenderers);
8
+ const nodes = renderRichMessage(message, renderer);
9
+ return nodes.join("");
10
+ };
20
11
  };
21
12
 
22
13
  export { createTRich };
@@ -1,31 +1,23 @@
1
1
  import { Translator } from 'intor-translator';
2
2
  import { mergeMessages } from '../messages/merge-messages.js';
3
3
 
4
- /**
5
- * Create a server-side Translator instance for a fixed locale.
6
- *
7
- * - Merges static config messages with runtime-loaded messages
8
- * - Initializes a Translator bound to a specific locale
9
- * - Injects fallback rules, handlers, and hooks from config
10
- */
11
4
  function createTranslator(params) {
12
- const { config, locale, messages, handlers, hooks } = params;
13
- // Merge static config messages with runtime-loaded messages
14
- const finalMessages = mergeMessages(config.messages, messages, {
15
- config,
16
- locale,
17
- });
18
- const { loadingMessage, missingMessage } = config.translator ?? {};
19
- const translator = new Translator({
20
- locale,
21
- messages: finalMessages,
22
- fallbackLocales: config.fallbackLocales,
23
- ...(loadingMessage !== undefined ? { loadingMessage } : {}),
24
- ...(missingMessage !== undefined ? { missingMessage } : {}),
25
- ...(handlers !== undefined ? { handlers } : {}),
26
- ...(hooks !== undefined ? { hooks } : {}),
27
- });
28
- return translator;
5
+ const { config, locale, messages, handlers, hooks } = params;
6
+ const finalMessages = mergeMessages(config.messages, messages, {
7
+ config,
8
+ locale
9
+ });
10
+ const { loadingMessage, missingMessage } = config.translator ?? {};
11
+ const translator = new Translator({
12
+ locale,
13
+ messages: finalMessages,
14
+ fallbackLocales: config.fallbackLocales,
15
+ ...loadingMessage !== void 0 ? { loadingMessage } : {},
16
+ ...missingMessage !== void 0 ? { missingMessage } : {},
17
+ ...handlers !== void 0 ? { handlers } : {},
18
+ ...hooks !== void 0 ? { hooks } : {}
19
+ });
20
+ return translator;
29
21
  }
30
22
 
31
23
  export { createTranslator };
@@ -1,47 +1,29 @@
1
- /**
2
- * Deeply merges two plain objects.
3
- *
4
- * - Nested plain objects → merged recursively
5
- * - Arrays / primitives → `b` overwrites `a`
6
- *
7
- * Debug behavior (optional):
8
- * - Emits override events via `onOverride`
9
- * - Zero overhead when no options are provided
10
- *
11
- * This function always returns a new plain object.
12
- */
13
1
  const deepMerge = (a = {}, b = {}, options) => {
14
- const result = { ...a };
15
- const basePath = options?._path ?? [];
16
- // Iterate only over b's own enumerable properties
17
- for (const key in b) {
18
- if (!Object.prototype.hasOwnProperty.call(b, key))
19
- continue;
20
- const aValue = a[key];
21
- const bValue = b[key];
22
- const nextPath = [...basePath, key];
23
- // Recursively merge when both sides are plain objects
24
- if (aValue &&
25
- bValue &&
26
- typeof aValue === "object" &&
27
- typeof bValue === "object" &&
28
- !Array.isArray(aValue) &&
29
- !Array.isArray(bValue)) {
30
- result[key] = deepMerge(aValue, bValue, options ? { ...options, _path: nextPath } : undefined);
31
- }
32
- else {
33
- // Emit override event only when debugging is enabled
34
- const isAdd = aValue === undefined;
35
- options?.onOverride?.({
36
- path: nextPath.join("."),
37
- prev: aValue,
38
- next: bValue,
39
- kind: isAdd ? "add" : "override",
40
- });
41
- result[key] = bValue;
42
- }
2
+ const result = { ...a };
3
+ const basePath = options?._path ?? [];
4
+ for (const key in b) {
5
+ if (!Object.prototype.hasOwnProperty.call(b, key)) continue;
6
+ const aValue = a[key];
7
+ const bValue = b[key];
8
+ const nextPath = [...basePath, key];
9
+ if (aValue && bValue && typeof aValue === "object" && typeof bValue === "object" && !Array.isArray(aValue) && !Array.isArray(bValue)) {
10
+ result[key] = deepMerge(
11
+ aValue,
12
+ bValue,
13
+ options ? { ...options, _path: nextPath } : void 0
14
+ );
15
+ } else {
16
+ const isAdd = aValue === void 0;
17
+ options?.onOverride?.({
18
+ path: nextPath.join("."),
19
+ prev: aValue,
20
+ next: bValue,
21
+ kind: isAdd ? "add" : "override"
22
+ });
23
+ result[key] = bValue;
43
24
  }
44
- return result;
25
+ }
26
+ return result;
45
27
  };
46
28
 
47
29
  export { deepMerge };
@@ -1,45 +1,19 @@
1
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
- */
2
+ const sanitize = (k) => k.replaceAll(/[\u200B-\u200D\uFEFF]/g, "").replaceAll(/[\r\n]/g, "").trim();
17
3
  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);
4
+ if (key === null || key === void 0) return null;
5
+ if (Array.isArray(key)) {
6
+ if (key.length === 0) return null;
7
+ const normalized = key.map((k) => {
8
+ if (k === null) return "__null";
9
+ if (k === void 0) return "__undefined";
10
+ if (typeof k === "boolean") return k ? "__true" : "__false";
11
+ return sanitize(String(k));
12
+ });
13
+ return normalized.join(delimiter);
14
+ }
15
+ if (typeof key === "boolean") return key ? "__true" : "__false";
16
+ return String(key);
43
17
  };
44
18
 
45
19
  export { normalizeCacheKey };
@@ -1,42 +1,24 @@
1
- /**
2
- * Normalizes a raw pathname string into a consistent structural form.
3
- *
4
- * Canonical guarantees:
5
- * - Leading and trailing whitespace (code points ≤ 32) are trimmed
6
- * - Consecutive slashes are collapsed into a single slash
7
- * - The result always starts with a single "/"
8
- * - Redundant trailing slashes are removed
9
- * - The root path is represented as "/"
10
- *
11
- * This function is deterministic and allocation-minimized.
12
- */
13
1
  const normalizePathname = (rawPathname) => {
14
- const length = rawPathname.length;
15
- let start = 0;
16
- let end = length - 1;
17
- // Trim leading whitespace
18
- while (start <= end && rawPathname.codePointAt(start) <= 32)
19
- start++;
20
- // Trim trailing whitespace
21
- while (end >= start && rawPathname.codePointAt(end) <= 32)
22
- end--;
23
- if (start > end)
24
- return "/"; // Only whitespace
25
- let result = "";
26
- let hasSlash = false;
27
- for (let i = start; i <= end; i++) {
28
- const char = rawPathname[i];
29
- if (char === "/") {
30
- if (!hasSlash) {
31
- hasSlash = true;
32
- }
33
- }
34
- else {
35
- result += hasSlash || result === "" ? "/" + char : char;
36
- hasSlash = false;
37
- }
2
+ const length = rawPathname.length;
3
+ let start = 0;
4
+ let end = length - 1;
5
+ while (start <= end && rawPathname.codePointAt(start) <= 32) start++;
6
+ while (end >= start && rawPathname.codePointAt(end) <= 32) end--;
7
+ if (start > end) return "/";
8
+ let result = "";
9
+ let hasSlash = false;
10
+ for (let i = start; i <= end; i++) {
11
+ const char = rawPathname[i];
12
+ if (char === "/") {
13
+ if (!hasSlash) {
14
+ hasSlash = true;
15
+ }
16
+ } else {
17
+ result += hasSlash || result === "" ? "/" + char : char;
18
+ hasSlash = false;
38
19
  }
39
- return result || "/";
20
+ }
21
+ return result || "/";
40
22
  };
41
23
 
42
24
  export { normalizePathname };
@@ -1,25 +1,11 @@
1
- /**
2
- * Normalize a raw query object into a string-only map.
3
- *
4
- * This utility is used to sanitize framework-specific query inputs
5
- * into a stable shape that the routing core
6
- * can safely consume.
7
- *
8
- * Behavior:
9
- * - Keeps only entries whose values are strings
10
- * - Ignores arrays, objects, and other non-string values
11
- * - Does not throw or attempt to coerce values
12
- *
13
- * This function is intentionally conservative by design.
14
- */
15
1
  function normalizeQuery(query) {
16
- const normalized = {};
17
- for (const [key, value] of Object.entries(query)) {
18
- if (typeof value === "string") {
19
- normalized[key] = value;
20
- }
2
+ const normalized = {};
3
+ for (const [key, value] of Object.entries(query)) {
4
+ if (typeof value === "string") {
5
+ normalized[key] = value;
21
6
  }
22
- return normalized;
7
+ }
8
+ return normalized;
23
9
  }
24
10
 
25
11
  export { normalizeQuery };
@@ -1,22 +1,15 @@
1
- /**
2
- * Parse a raw HTTP Cookie header into a key-value record.
3
- */
4
1
  function parseCookieHeader(cookieHeader) {
5
- if (!cookieHeader)
6
- return {};
7
- const record = {};
8
- // Split the Cookie header into individual key-value pairs
9
- const pairs = cookieHeader.split(";");
10
- for (const pair of pairs) {
11
- // Locate the first "=" to separate key and value
12
- const index = pair.indexOf("=");
13
- if (index === -1)
14
- continue;
15
- const key = pair.slice(0, index).trim();
16
- const value = pair.slice(index + 1).trim();
17
- record[key] = decodeURIComponent(value);
18
- }
19
- return record;
2
+ if (!cookieHeader) return {};
3
+ const record = {};
4
+ const pairs = cookieHeader.split(";");
5
+ for (const pair of pairs) {
6
+ const index = pair.indexOf("=");
7
+ if (index === -1) continue;
8
+ const key = pair.slice(0, index).trim();
9
+ const value = pair.slice(index + 1).trim();
10
+ record[key] = decodeURIComponent(value);
11
+ }
12
+ return record;
20
13
  }
21
14
 
22
15
  export { parseCookieHeader };
@@ -1,38 +1,12 @@
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
1
  const resolveLoaderOptions = (config, runtime) => {
21
- // ------------------------------------------------
22
- // runtime: client
23
- // ------------------------------------------------
24
- if (runtime === "client") {
25
- const client = config.client?.loader;
26
- if (client) {
27
- // Client loader is always remote by design
28
- return { mode: "remote", ...client };
29
- }
30
- return config.server?.loader ?? config.loader;
2
+ if (runtime === "client") {
3
+ const client = config.client?.loader;
4
+ if (client) {
5
+ return { mode: "remote", ...client };
31
6
  }
32
- // ------------------------------------------------
33
- // runtime: server
34
- // ------------------------------------------------
35
7
  return config.server?.loader ?? config.loader;
8
+ }
9
+ return config.server?.loader ?? config.loader;
36
10
  };
37
11
 
38
12
  export { resolveLoaderOptions };
@@ -4,27 +4,21 @@ import 'intor-translator';
4
4
  import { createTRich } from '../../core/translator/create-t-rich.js';
5
5
  import { initTranslator } from '../translator/init-translator.js';
6
6
 
7
- /**
8
- * Get a edge-runtime translator for the current execution context.
9
- *
10
- * @public
11
- */
12
7
  async function getTranslator(config, params) {
13
- const { locale, fetch = globalThis.fetch, preKey, handlers, hooks } = params;
14
- // Initialize a locale-bound translator snapshot with messages loaded
15
- const translator = await initTranslator(config, locale, {
16
- fetch,
17
- ...(handlers !== undefined ? { handlers } : {}),
18
- ...(hooks !== undefined ? { hooks } : {}),
19
- });
20
- const scoped = translator.scoped(preKey);
21
- return {
22
- messages: translator.messages,
23
- locale: translator.locale,
24
- hasKey: scoped.hasKey,
25
- t: scoped.t,
26
- tRich: createTRich(scoped.t),
27
- };
8
+ const { locale, fetch = globalThis.fetch, preKey, handlers, hooks } = params;
9
+ const translator = await initTranslator(config, locale, {
10
+ fetch,
11
+ ...handlers !== void 0 ? { handlers } : {},
12
+ ...hooks !== void 0 ? { hooks } : {}
13
+ });
14
+ const scoped = translator.scoped(preKey);
15
+ return {
16
+ messages: translator.messages,
17
+ locale: translator.locale,
18
+ hasKey: scoped.hasKey,
19
+ t: scoped.t,
20
+ tRich: createTRich(scoped.t)
21
+ };
28
22
  }
29
23
 
30
24
  export { getTranslator };
@@ -3,39 +3,31 @@ import { loadRemoteMessages } from '../../core/messages/load-remote-messages/loa
3
3
  import { createTranslator } from '../../core/translator/create-translator.js';
4
4
  import 'intor-translator';
5
5
 
6
- /**
7
- * Initialize a locale-bound Translator snapshot.
8
- *
9
- * - Loads translation messages using the configured remote loader, if present.
10
- * - Creates an immutable Translator instance for edge runtimes
11
- */
12
6
  async function initTranslator(config, locale, options) {
13
- const { loader } = config;
14
- const { fetch, handlers, hooks } = options;
15
- // Load messages
16
- let messages = {};
17
- if (loader && loader.mode === "remote") {
18
- const { namespaces, concurrency, url, headers } = loader;
19
- const loaded = await loadRemoteMessages({
20
- locale,
21
- fallbackLocales: config.fallbackLocales[locale] || [],
22
- ...(namespaces !== undefined ? { namespaces } : {}),
23
- ...(concurrency !== undefined ? { concurrency } : {}),
24
- fetch,
25
- url,
26
- ...(headers !== undefined ? { headers: headers } : {}),
27
- loggerOptions: config.logger,
28
- });
29
- messages = loaded || {};
30
- }
31
- // Create immutable translator snapshot
32
- return createTranslator({
33
- config,
34
- locale,
35
- messages,
36
- ...(handlers !== undefined ? { handlers } : {}),
37
- ...(hooks !== undefined ? { hooks } : {}),
7
+ const { loader } = config;
8
+ const { fetch, handlers, hooks } = options;
9
+ let messages = {};
10
+ if (loader && loader.mode === "remote") {
11
+ const { namespaces, concurrency, url, headers } = loader;
12
+ const loaded = await loadRemoteMessages({
13
+ locale,
14
+ fallbackLocales: config.fallbackLocales[locale] || [],
15
+ ...namespaces !== void 0 ? { namespaces } : {},
16
+ ...concurrency !== void 0 ? { concurrency } : {},
17
+ fetch,
18
+ url,
19
+ ...headers !== void 0 ? { headers } : {},
20
+ loggerOptions: config.logger
38
21
  });
22
+ messages = loaded || {};
23
+ }
24
+ return createTranslator({
25
+ config,
26
+ locale,
27
+ messages,
28
+ ...handlers !== void 0 ? { handlers } : {},
29
+ ...hooks !== void 0 ? { hooks } : {}
30
+ });
39
31
  }
40
32
 
41
33
  export { initTranslator };