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,44 +1,29 @@
1
- /** Check if a value is a plain object (not null, not array) */
2
1
  function isPlainObject(value) {
3
- return typeof value === "object" && value !== null && !Array.isArray(value);
2
+ return typeof value === "object" && value !== null && !Array.isArray(value);
4
3
  }
5
- /**
6
- * Check if a value is a valid MessageObject.
7
- *
8
- * - Supports all MessageValue variants (primitive, array, object).
9
- * - Uses an iterative approach to avoid stack overflow.
10
- */
11
4
  function isValidMessages(value) {
12
- if (!isPlainObject(value))
13
- return false;
14
- const stack = [value];
15
- while (stack.length > 0) {
16
- const current = stack.pop();
17
- // primitives are always valid
18
- if (current === null ||
19
- typeof current === "string" ||
20
- typeof current === "number" ||
21
- typeof current === "boolean") {
22
- continue;
23
- }
24
- // array → validate each item
25
- if (Array.isArray(current)) {
26
- for (const item of current) {
27
- stack.push(item);
28
- }
29
- continue;
30
- }
31
- // object → validate each value
32
- if (isPlainObject(current)) {
33
- for (const v of Object.values(current)) {
34
- stack.push(v);
35
- }
36
- continue;
37
- }
38
- // everything else is invalid
39
- return false;
5
+ if (!isPlainObject(value)) return false;
6
+ const stack = [value];
7
+ while (stack.length > 0) {
8
+ const current = stack.pop();
9
+ if (current === null || typeof current === "string" || typeof current === "number" || typeof current === "boolean") {
10
+ continue;
40
11
  }
41
- return true;
12
+ if (Array.isArray(current)) {
13
+ for (const item of current) {
14
+ stack.push(item);
15
+ }
16
+ continue;
17
+ }
18
+ if (isPlainObject(current)) {
19
+ for (const v of Object.values(current)) {
20
+ stack.push(v);
21
+ }
22
+ continue;
23
+ }
24
+ return false;
25
+ }
26
+ return true;
42
27
  }
43
28
 
44
29
  export { isPlainObject, isValidMessages };
@@ -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,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,34 +1,11 @@
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
- {
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
+ {
3
+ const client = config.client?.loader;
4
+ if (client) {
5
+ return { mode: "remote", ...client };
31
6
  }
7
+ return config.server?.loader ?? config.loader;
8
+ }
32
9
  };
33
10
 
34
11
  export { resolveLoaderOptions };
@@ -1,8 +1,5 @@
1
- /**
2
- * Allow locale persistence based on first-visit policy.
3
- */
4
1
  function shouldPersistOnFirstVisit(isFirstVisit, persistOnFirstVisit) {
5
- return !isFirstVisit || persistOnFirstVisit;
2
+ return !isFirstVisit || persistOnFirstVisit;
6
3
  }
7
4
 
8
5
  export { shouldPersistOnFirstVisit };
@@ -7,65 +7,45 @@ import { resolveInbound } from '../../routing/inbound/resolve-inbound.js';
7
7
  import { getLocaleFromAcceptLanguage } from '../../routing/locale/get-locale-from-accept-language.js';
8
8
  import { isSvelteKitSSG } from './utils/is-svelte-kit-ssg.js';
9
9
 
10
- /**
11
- * Resolves locale-aware routing for the current execution context.
12
- *
13
- * - Acts as the canonical routing authority within the SvelteKit request lifecycle.
14
- *
15
- * @public
16
- */
17
10
  function createIntorHandler(config) {
18
- return async function intorHandler({ event, resolve }) {
19
- // Locale from Accept-Language header
20
- const acceptLanguage = event.request.headers.get("accept-language");
21
- const localeFromAcceptLanguage = getLocaleFromAcceptLanguage(acceptLanguage, config.supportedLocales);
22
- // ----------------------------------------------------------
23
- // Resolve inbound routing decision (pure computation)
24
- // ----------------------------------------------------------
25
- let inboundResult;
26
- if (isSvelteKitSSG(event)) {
27
- const locale = event.params?.["locale"];
28
- if (!locale)
29
- throw new Error("Locale param is missing in SSG mode.");
30
- inboundResult = {
31
- locale,
32
- localeSource: "path",
33
- pathname: event.url.pathname,
34
- shouldRedirect: false,
35
- };
36
- }
37
- else {
38
- const cookie = event.cookies.get(config.cookie.name);
39
- const { host, searchParams, pathname: rawPathname } = event.url;
40
- inboundResult = resolveInbound(config, rawPathname, {
41
- host,
42
- query: normalizeQuery(Object.fromEntries(searchParams.entries())),
43
- ...(cookie !== undefined ? { cookie } : {}),
44
- ...(localeFromAcceptLanguage !== undefined
45
- ? { detected: localeFromAcceptLanguage }
46
- : {}),
47
- });
48
- }
49
- const { locale, localeSource, pathname, shouldRedirect } = inboundResult;
50
- // ----------------------------------------------------------
51
- // Redirect if needed
52
- // ----------------------------------------------------------
53
- if (shouldRedirect)
54
- redirect(307, pathname);
55
- // ----------------------------------------------------------
56
- // Bind inbound routing context
57
- // ----------------------------------------------------------
58
- // @ts-expect-error - App.Locals must be extended by user
59
- event.locals.intor = {
60
- locale,
61
- localeSource,
62
- pathname,
63
- };
64
- const response = await resolve(event, {
65
- transformPageChunk: ({ html }) => html.replace("%lang%", locale),
66
- });
67
- return response;
11
+ return async function intorHandler({ event, resolve }) {
12
+ const acceptLanguage = event.request.headers.get("accept-language");
13
+ const localeFromAcceptLanguage = getLocaleFromAcceptLanguage(
14
+ acceptLanguage,
15
+ config.supportedLocales
16
+ );
17
+ let inboundResult;
18
+ if (isSvelteKitSSG(event)) {
19
+ const locale2 = event.params?.["locale"];
20
+ if (!locale2) throw new Error("Locale param is missing in SSG mode.");
21
+ inboundResult = {
22
+ locale: locale2,
23
+ localeSource: "path",
24
+ pathname: event.url.pathname,
25
+ shouldRedirect: false
26
+ };
27
+ } else {
28
+ const cookie = event.cookies.get(config.cookie.name);
29
+ const { host, searchParams, pathname: rawPathname } = event.url;
30
+ inboundResult = resolveInbound(config, rawPathname, {
31
+ host,
32
+ query: normalizeQuery(Object.fromEntries(searchParams.entries())),
33
+ ...cookie !== void 0 ? { cookie } : {},
34
+ ...localeFromAcceptLanguage !== void 0 ? { detected: localeFromAcceptLanguage } : {}
35
+ });
36
+ }
37
+ const { locale, localeSource, pathname, shouldRedirect } = inboundResult;
38
+ if (shouldRedirect) redirect(307, pathname);
39
+ event.locals.intor = {
40
+ locale,
41
+ localeSource,
42
+ pathname
68
43
  };
44
+ const response = await resolve(event, {
45
+ transformPageChunk: ({ html }) => html.replace("%lang%", locale)
46
+ });
47
+ return response;
48
+ };
69
49
  }
70
50
 
71
51
  export { createIntorHandler };
@@ -8,34 +8,36 @@ import { resolveOutbound } from '../../routing/outbound/resolve-outbound.js';
8
8
  import { goto } from '$app/navigation';
9
9
  import { page } from '$app/state';
10
10
 
11
- /**
12
- * Locale-aware navigation utilities for SvelteKit.
13
- *
14
- * Provides imperative navigation helpers that integrate
15
- * Intor's locale-aware routing and side effects.
16
- *
17
- * @public
18
- */
19
11
  function useNavigation() {
20
- const { config, locale: currentLocale, setLocale } = getIntorContext();
21
- async function goto$1(url, opts) {
22
- const { locale, ...rest } = opts || {};
23
- const outboundResult = resolveOutbound(config, get(currentLocale), page.url.pathname, { destination: url, ...(locale !== undefined ? { locale } : {}) });
24
- executeNavigation(outboundResult, {
25
- config,
26
- currentLocale: get(currentLocale),
27
- setLocale,
28
- });
29
- return goto(outboundResult.destination, rest);
30
- }
31
- function href(url) {
32
- const { destination } = resolveOutbound(config, get(currentLocale), page.url.pathname, { destination: url });
33
- return destination;
34
- }
35
- return {
36
- goto: goto$1,
37
- href,
38
- };
12
+ const { config, locale: currentLocale, setLocale } = getIntorContext();
13
+ async function goto$1(url, opts) {
14
+ const { locale, ...rest } = opts || {};
15
+ const outboundResult = resolveOutbound(
16
+ config,
17
+ get(currentLocale),
18
+ page.url.pathname,
19
+ { destination: url, ...locale !== void 0 ? { locale } : {} }
20
+ );
21
+ executeNavigation(outboundResult, {
22
+ config,
23
+ currentLocale: get(currentLocale),
24
+ setLocale
25
+ });
26
+ return goto(outboundResult.destination, rest);
27
+ }
28
+ function href(url) {
29
+ const { destination } = resolveOutbound(
30
+ config,
31
+ get(currentLocale),
32
+ page.url.pathname,
33
+ { destination: url }
34
+ );
35
+ return destination;
36
+ }
37
+ return {
38
+ goto: goto$1,
39
+ href
40
+ };
39
41
  }
40
42
 
41
43
  export { useNavigation };
@@ -1,15 +1,8 @@
1
- /**
2
- * Heuristic to detect static (prerender) execution in SvelteKit.
3
- *
4
- * This is NOT a guaranteed signal.
5
- * It intentionally prefers false positives over false negatives.
6
- */
7
1
  function isSvelteKitSSG(event) {
8
- // No user-agent is a strong signal of static rendering
9
- if (event.request.headers.get("user-agent") === null) {
10
- return true;
11
- }
12
- return false;
2
+ if (event.request.headers.get("user-agent") === null) {
3
+ return true;
4
+ }
5
+ return false;
13
6
  }
14
7
 
15
8
  export { isSvelteKitSSG };
@@ -4,46 +4,28 @@ import 'intor-translator';
4
4
  import { shouldSyncLocale } from '../../../policies/should-sync-locale.js';
5
5
  import { setLocaleCookie } from '../utils/locale/set-locale-cookie.js';
6
6
 
7
- /**
8
- * Executes a resolved outbound routing result.
9
- *
10
- * Applies all imperative side effects required to realize the outbound decision,
11
- * including locale synchronization, cookie persistence, and full page reloads.
12
- *
13
- * This function must be called after `resolveOutbound`.
14
- */
15
7
  function executeNavigation(outboundResult, context, e) {
16
- const { config, currentLocale, setLocale } = context;
17
- const { cookie } = config;
18
- const { destination, kind, locale } = outboundResult;
19
- // ------------------------------------------------------
20
- // External navigation: let browser handle it
21
- // ------------------------------------------------------
22
- if (kind === "external") {
23
- return;
24
- }
25
- // ------------------------------------------------------
26
- // Full reload: commit locale side effects, then perform document reload
27
- // ------------------------------------------------------
28
- if (kind === "reload") {
29
- if (shouldSyncLocale(locale, currentLocale)) {
30
- if (cookie.persist) {
31
- setLocaleCookie(cookie, locale);
32
- }
33
- }
34
- globalThis.location.href = destination;
35
- return;
36
- }
37
- // ------------------------------------------------------
38
- // Client-side navigation only
39
- // ------------------------------------------------------
8
+ const { config, currentLocale, setLocale } = context;
9
+ const { cookie } = config;
10
+ const { destination, kind, locale } = outboundResult;
11
+ if (kind === "external") {
12
+ return;
13
+ }
14
+ if (kind === "reload") {
40
15
  if (shouldSyncLocale(locale, currentLocale)) {
41
- // Eagerly persist locale to avoid stale cookie during client-side navigation.
42
- if (cookie.persist) {
43
- setLocaleCookie(cookie, locale);
44
- }
45
- setLocale(locale);
16
+ if (cookie.persist) {
17
+ setLocaleCookie(cookie, locale);
18
+ }
19
+ }
20
+ globalThis.location.href = destination;
21
+ return;
22
+ }
23
+ if (shouldSyncLocale(locale, currentLocale)) {
24
+ if (cookie.persist) {
25
+ setLocaleCookie(cookie, locale);
46
26
  }
27
+ setLocale(locale);
28
+ }
47
29
  }
48
30
 
49
31
  export { executeNavigation };