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
@@ -6,35 +6,28 @@ import 'intor-translator';
6
6
  import { getLocaleFromAcceptLanguage } from '../../locale/get-locale-from-accept-language.js';
7
7
  import { resolveInbound } from '../resolve-inbound.js';
8
8
 
9
- /**
10
- * Resolves inbound routing state from a Web standard `Request`.
11
- *
12
- * @public
13
- */
14
9
  function resolveInboundFromRequest(config, request) {
15
- const url = new URL(request.url);
16
- const headers = request.headers;
17
- // Cookie
18
- const cookies = parseCookieHeader(headers.get("cookie") ?? undefined);
19
- const cookieLocale = cookies[config.cookie.name];
20
- // Query
21
- const normalizedQuery = normalizeQuery(Object.fromEntries(url.searchParams));
22
- // Accept-Language
23
- const acceptLanguage = headers.get("accept-language") ?? undefined;
24
- const localeFromAcceptLanguage = getLocaleFromAcceptLanguage(acceptLanguage, config.supportedLocales);
25
- const inbounResult = resolveInbound(config, url.pathname, {
26
- host: url.hostname,
27
- query: normalizedQuery,
28
- ...(cookieLocale !== undefined ? { cookie: cookieLocale } : {}),
29
- ...(localeFromAcceptLanguage !== undefined
30
- ? { detected: localeFromAcceptLanguage }
31
- : {}),
32
- });
33
- return {
34
- locale: inbounResult.locale,
35
- localeSource: inbounResult.localeSource,
36
- pathname: inbounResult.pathname,
37
- };
10
+ const url = new URL(request.url);
11
+ const headers = request.headers;
12
+ const cookies = parseCookieHeader(headers.get("cookie") ?? void 0);
13
+ const cookieLocale = cookies[config.cookie.name];
14
+ const normalizedQuery = normalizeQuery(Object.fromEntries(url.searchParams));
15
+ const acceptLanguage = headers.get("accept-language") ?? void 0;
16
+ const localeFromAcceptLanguage = getLocaleFromAcceptLanguage(
17
+ acceptLanguage,
18
+ config.supportedLocales
19
+ );
20
+ const inbounResult = resolveInbound(config, url.pathname, {
21
+ host: url.hostname,
22
+ query: normalizedQuery,
23
+ ...cookieLocale !== void 0 ? { cookie: cookieLocale } : {},
24
+ ...localeFromAcceptLanguage !== void 0 ? { detected: localeFromAcceptLanguage } : {}
25
+ });
26
+ return {
27
+ locale: inbounResult.locale,
28
+ localeSource: inbounResult.localeSource,
29
+ pathname: inbounResult.pathname
30
+ };
38
31
  }
39
32
 
40
33
  export { resolveInboundFromRequest };
@@ -4,44 +4,29 @@ import { getLocaleFromQuery } from '../locale/get-locale-from-query.js';
4
4
  import { resolveLocale } from './resolve-locale/resolve-locale.js';
5
5
  import { resolvePathname } from './resolve-pathname/resolve-pathname.js';
6
6
 
7
- /**
8
- * Resolves inbound routing state.
9
- *
10
- * - Resolves the effective locale from inbound inputs
11
- * - Localizes the pathname based on the resolved locale
12
- * - Indicates whether a redirect is required
13
- *
14
- * No side effects. No navigation.
15
- */
16
7
  function resolveInbound(config, rawPathname, localeInputs, options) {
17
- const { queryKey } = config.routing.inbound;
18
- const { host, query, cookie, detected } = localeInputs;
19
- // ------------------------------------------------------
20
- // Resolve locale from inbound inputs
21
- // ------------------------------------------------------
22
- const pathLocale = getLocaleFromPathname(rawPathname, config);
23
- const hostLocale = getLocaleFromHost(host);
24
- const queryLocale = getLocaleFromQuery(query, queryKey);
25
- const { locale, localeSource } = resolveLocale(config, {
26
- ...(pathLocale !== undefined && { path: { locale: pathLocale } }),
27
- ...(hostLocale !== undefined && { host: { locale: hostLocale } }),
28
- ...(queryLocale !== undefined && { query: { locale: queryLocale } }),
29
- ...(cookie !== undefined && { cookie: { locale: cookie } }),
30
- ...(detected !== undefined && { detected: { locale: detected } }),
31
- });
32
- // ------------------------------------------------------
33
- // Resolve localized pathname and redirect requirement
34
- // ------------------------------------------------------
35
- const { pathname, shouldRedirect } = resolvePathname(config, rawPathname, {
36
- locale,
37
- hasPathLocale: !!pathLocale,
38
- hasPersisted: !!cookie});
39
- return {
40
- locale,
41
- localeSource,
42
- pathname,
43
- shouldRedirect,
44
- };
8
+ const { queryKey } = config.routing.inbound;
9
+ const { host, query, cookie, detected } = localeInputs;
10
+ const pathLocale = getLocaleFromPathname(rawPathname, config);
11
+ const hostLocale = getLocaleFromHost(host);
12
+ const queryLocale = getLocaleFromQuery(query, queryKey);
13
+ const { locale, localeSource } = resolveLocale(config, {
14
+ ...pathLocale !== void 0 && { path: { locale: pathLocale } },
15
+ ...hostLocale !== void 0 && { host: { locale: hostLocale } },
16
+ ...queryLocale !== void 0 && { query: { locale: queryLocale } },
17
+ ...cookie !== void 0 && { cookie: { locale: cookie } },
18
+ ...detected !== void 0 && { detected: { locale: detected } }
19
+ });
20
+ const { pathname, shouldRedirect } = resolvePathname(config, rawPathname, {
21
+ locale,
22
+ hasPathLocale: !!pathLocale,
23
+ hasPersisted: !!cookie});
24
+ return {
25
+ locale,
26
+ localeSource,
27
+ pathname,
28
+ shouldRedirect
29
+ };
45
30
  }
46
31
 
47
32
  export { resolveInbound };
@@ -3,48 +3,31 @@ import 'logry';
3
3
  import 'p-limit';
4
4
  import 'intor-translator';
5
5
 
6
- /**
7
- * Resolves the active locale from inbound routing configuration.
8
- *
9
- * Resolution order:
10
- * 1. Configured locale signals (path / query / host / cookie)
11
- * 2. Runtime detection signal ("detected")
12
- * 3. Invariant fallback ("default")
13
- *
14
- * Always returns a supported locale.
15
- */
16
6
  function resolveLocale(config, context) {
17
- const { localeSources } = config.routing.inbound;
18
- // ------------------------------------------------------
19
- // 1. Configured resolution signals (policy-ordered)
20
- // ------------------------------------------------------
21
- for (const source of localeSources) {
22
- const locale = context[source]?.locale;
23
- const normalized = matchLocale(locale, config.supportedLocales);
24
- if (!normalized)
25
- continue;
26
- return {
27
- locale: normalized,
28
- localeSource: source,
29
- };
30
- }
31
- // ------------------------------------------------------
32
- // 2. Detection fallback (runtime signal)
33
- // ------------------------------------------------------
34
- const detected = matchLocale(context.detected?.locale, config.supportedLocales);
35
- if (detected) {
36
- return {
37
- locale: detected,
38
- localeSource: "detected",
39
- };
40
- }
41
- // ------------------------------------------------------
42
- // 3. Final invariant fallback (guaranteed)
43
- // ------------------------------------------------------
7
+ const { localeSources } = config.routing.inbound;
8
+ for (const source of localeSources) {
9
+ const locale = context[source]?.locale;
10
+ const normalized = matchLocale(locale, config.supportedLocales);
11
+ if (!normalized) continue;
44
12
  return {
45
- locale: config.defaultLocale,
46
- localeSource: "default",
13
+ locale: normalized,
14
+ localeSource: source
47
15
  };
16
+ }
17
+ const detected = matchLocale(
18
+ context.detected?.locale,
19
+ config.supportedLocales
20
+ );
21
+ if (detected) {
22
+ return {
23
+ locale: detected,
24
+ localeSource: "detected"
25
+ };
26
+ }
27
+ return {
28
+ locale: config.defaultLocale,
29
+ localeSource: "default"
30
+ };
48
31
  }
49
32
 
50
33
  export { resolveLocale };
@@ -4,39 +4,33 @@ import { exceptDefault } from './strategies/except-default.js';
4
4
  import { none } from './strategies/none.js';
5
5
 
6
6
  const assertNever = (x) => {
7
- throw new Error(`Unhandled prefix strategy: ${String(x)}`);
7
+ throw new Error(`Unhandled prefix strategy: ${String(x)}`);
8
8
  };
9
- /**
10
- * Resolves the canonical pathname based on locale prefix behavior.
11
- *
12
- * The resolved pathname represents the final, normalized form
13
- * used for routing and navigation.
14
- */
15
9
  const resolvePathname = (config, rawPathname, context) => {
16
- const { localePrefix } = config.routing;
17
- let directive;
18
- switch (localePrefix) {
19
- case "all": {
20
- directive = all(config, context);
21
- break;
22
- }
23
- case "except-default": {
24
- directive = exceptDefault(config, context);
25
- break;
26
- }
27
- case "none": {
28
- directive = none();
29
- break;
30
- }
31
- default: {
32
- return assertNever(localePrefix);
33
- }
10
+ const { localePrefix } = config.routing;
11
+ let directive;
12
+ switch (localePrefix) {
13
+ case "all": {
14
+ directive = all(config, context);
15
+ break;
34
16
  }
35
- const { pathname } = localizePathname(rawPathname, config, context.locale);
36
- return {
37
- pathname,
38
- shouldRedirect: directive.type === "redirect",
39
- };
17
+ case "except-default": {
18
+ directive = exceptDefault(config, context);
19
+ break;
20
+ }
21
+ case "none": {
22
+ directive = none();
23
+ break;
24
+ }
25
+ default: {
26
+ return assertNever(localePrefix);
27
+ }
28
+ }
29
+ const { pathname } = localizePathname(rawPathname, config, context.locale);
30
+ return {
31
+ pathname,
32
+ shouldRedirect: directive.type === "redirect"
33
+ };
40
34
  };
41
35
 
42
36
  export { resolvePathname };
@@ -1,28 +1,15 @@
1
- /**
2
- * Resolve pathname decision for routing prefix strategy: "all".
3
- */
4
1
  function all(config, context) {
5
- const { hasPathLocale, hasPersisted} = context;
6
- const { redirect } = config.routing.inbound.firstVisit;
7
- const isFirstVisit = !hasPersisted;
8
- // ----------------------------------------------------------
9
- // URL already canonical
10
- // ----------------------------------------------------------
11
- if (hasPathLocale) {
12
- return { type: "pass" };
13
- }
14
- // ----------------------------------------------------------
15
- // Apply first-visit redirect policy
16
- // ----------------------------------------------------------
17
- if (isFirstVisit) {
18
- if (!redirect)
19
- return { type: "pass" };
20
- return { type: "redirect" };
21
- }
22
- // ----------------------------------------------------------
23
- // Redirect to the locale-prefixed URL
24
- // ----------------------------------------------------------
2
+ const { hasPathLocale, hasPersisted} = context;
3
+ const { redirect } = config.routing.inbound.firstVisit;
4
+ const isFirstVisit = !hasPersisted;
5
+ if (hasPathLocale) {
6
+ return { type: "pass" };
7
+ }
8
+ if (isFirstVisit) {
9
+ if (!redirect) return { type: "pass" };
25
10
  return { type: "redirect" };
11
+ }
12
+ return { type: "redirect" };
26
13
  }
27
14
 
28
15
  export { all };
@@ -1,29 +1,16 @@
1
- /**
2
- * Resolve pathname decision for routing prefix strategy: "except-default".
3
- */
4
1
  function exceptDefault(config, context) {
5
- const { hasPathLocale, hasPersisted} = context;
6
- const { redirect } = config.routing.inbound.firstVisit;
7
- const isFirstVisit = !hasPersisted;
8
- const isDefaultLocale = context.locale === config.defaultLocale;
9
- // ----------------------------------------------------------
10
- // URL already canonical
11
- // ----------------------------------------------------------
12
- if (hasPathLocale) {
13
- return { type: "pass" };
14
- }
15
- // ----------------------------------------------------------
16
- // Apply first-visit redirect policy
17
- // ----------------------------------------------------------
18
- if (isFirstVisit) {
19
- if (!redirect)
20
- return { type: "pass" };
21
- return isDefaultLocale ? { type: "pass" } : { type: "redirect" };
22
- }
23
- // ----------------------------------------------------------
24
- // Redirect non-default locale to the locale-prefixed URL
25
- // ----------------------------------------------------------
2
+ const { hasPathLocale, hasPersisted} = context;
3
+ const { redirect } = config.routing.inbound.firstVisit;
4
+ const isFirstVisit = !hasPersisted;
5
+ const isDefaultLocale = context.locale === config.defaultLocale;
6
+ if (hasPathLocale) {
7
+ return { type: "pass" };
8
+ }
9
+ if (isFirstVisit) {
10
+ if (!redirect) return { type: "pass" };
26
11
  return isDefaultLocale ? { type: "pass" } : { type: "redirect" };
12
+ }
13
+ return isDefaultLocale ? { type: "pass" } : { type: "redirect" };
27
14
  }
28
15
 
29
16
  export { exceptDefault };
@@ -1,8 +1,5 @@
1
- /**
2
- * Resolve pathname decision for routing prefix strategy: "none".
3
- */
4
1
  function none() {
5
- return { type: "pass" };
2
+ return { type: "pass" };
6
3
  }
7
4
 
8
5
  export { none };
@@ -1,40 +1,25 @@
1
- /**
2
- * Get locale candidate from the `Accept-Language` header.
3
- *
4
- * Parses language priorities and returns the highest-priority
5
- * language present in `supportedLocales`, without normalization.
6
- *
7
- * @example
8
- * ```ts
9
- * getLocaleFromAcceptLanguage("en-US,en;q=0.8,zh-TW;q=0.9", ["en-US", "zh-TW"])
10
- * // => "en-US"
11
- *
12
- * getLocaleFromAcceptLanguage("fr,ja;q=0.9", ["en", "zh-TW"])
13
- * // => undefined
14
- * ```
15
- */
16
1
  const getLocaleFromAcceptLanguage = (acceptLanguageHeader, supportedLocales) => {
17
- if (!acceptLanguageHeader || supportedLocales.length === 0) {
18
- return;
19
- }
20
- const supportedLocalesSet = new Set(supportedLocales);
21
- // 1. Parse Accept-Language header into language + priority pairs
22
- const parsedLanguages = acceptLanguageHeader.split(",").map((part) => {
23
- const segments = part.split(";");
24
- const rawLang = segments[0];
25
- const rawQ = segments[1];
26
- const lang = rawLang.trim();
27
- const q = rawQ !== undefined ? Number.parseFloat(rawQ.split("=")[1] ?? "") : 1;
28
- return {
29
- lang,
30
- q: Number.isNaN(q) ? 0 : q, // Invalid q values have lowest priority
31
- };
32
- });
33
- // 2. Sort by priority (highest first)
34
- const sortedByPriority = parsedLanguages.sort((a, b) => b.q - a.q);
35
- // 3. Pick the first language explicitly supported
36
- const preferred = sortedByPriority.find(({ lang }) => supportedLocalesSet.has(lang))?.lang;
37
- return preferred;
2
+ if (!acceptLanguageHeader || supportedLocales.length === 0) {
3
+ return;
4
+ }
5
+ const supportedLocalesSet = new Set(supportedLocales);
6
+ const parsedLanguages = acceptLanguageHeader.split(",").map((part) => {
7
+ const segments = part.split(";");
8
+ const rawLang = segments[0];
9
+ const rawQ = segments[1];
10
+ const lang = rawLang.trim();
11
+ const q = rawQ !== void 0 ? Number.parseFloat(rawQ.split("=")[1] ?? "") : 1;
12
+ return {
13
+ lang,
14
+ q: Number.isNaN(q) ? 0 : q
15
+ // Invalid q values have lowest priority
16
+ };
17
+ });
18
+ const sortedByPriority = parsedLanguages.sort((a, b) => b.q - a.q);
19
+ const preferred = sortedByPriority.find(
20
+ ({ lang }) => supportedLocalesSet.has(lang)
21
+ )?.lang;
22
+ return preferred;
38
23
  };
39
24
 
40
25
  export { getLocaleFromAcceptLanguage };
@@ -1,32 +1,9 @@
1
- /**
2
- * Get locale candidate from hostname.
3
- *
4
- * Returns the left-most hostname label, without validation or normalization.
5
- *
6
- * @example
7
- * ```ts
8
- * getLocaleFromHost("en.example.com")
9
- * // => "en"
10
- *
11
- * getLocaleFromHost("example.com")
12
- * // => "example"
13
- *
14
- * getLocaleFromHost("api.jp.example.com")
15
- * // => "api"
16
- *
17
- * getLocaleFromHost("localhost")
18
- * // => undefined
19
- * ```
20
- */
21
1
  function getLocaleFromHost(host) {
22
- if (!host)
23
- return;
24
- // Remove port (e.g. localhost:3000)
25
- const hostname = host.split(":")[0];
26
- const parts = hostname.split(".");
27
- if (parts.length < 2)
28
- return;
29
- return parts[0];
2
+ if (!host) return;
3
+ const hostname = host.split(":")[0];
4
+ const parts = hostname.split(".");
5
+ if (parts.length < 2) return;
6
+ return parts[0];
30
7
  }
31
8
 
32
9
  export { getLocaleFromHost };
@@ -3,44 +3,18 @@ import 'logry';
3
3
  import 'p-limit';
4
4
  import 'intor-translator';
5
5
 
6
- /**
7
- * Get locale from pathname.
8
- *
9
- * Extracts the first pathname segment (after basePath) as a locale
10
- * if it exactly matches one of the supported locales.
11
- *
12
- * @example
13
- * ```ts
14
- * getLocaleFromPathname(config, "/en/about")
15
- * // => "en"
16
- * getLocaleFromPathname(config, "/zh-TW")
17
- * // => "zh-TW"
18
- * getLocaleFromPathname(config, "/about")
19
- * // => undefined
20
- *
21
- * // config.routing.basePath: "/app"
22
- * getLocaleFromPathname(config, "/app/en/dashboard")
23
- * // => "en"
24
- * ```
25
- */
26
6
  function getLocaleFromPathname(pathname, config) {
27
- const { routing, supportedLocales } = config;
28
- const { basePath } = routing;
29
- // 1. Normalize pathname
30
- const normalizedPathname = normalizePathname(pathname);
31
- // 2. Strip basePath
32
- let prefixedPathname = normalizedPathname;
33
- if (basePath && normalizedPathname === basePath) {
34
- prefixedPathname = "/";
35
- }
36
- else if (basePath && normalizedPathname.startsWith(basePath + "/")) {
37
- prefixedPathname = normalizedPathname.slice(basePath.length);
38
- }
39
- // 3. Detect locale segment
40
- const firstSegment = prefixedPathname.split("/").find(Boolean);
41
- return firstSegment && supportedLocales.includes(firstSegment)
42
- ? firstSegment
43
- : undefined;
7
+ const { routing, supportedLocales } = config;
8
+ const { basePath } = routing;
9
+ const normalizedPathname = normalizePathname(pathname);
10
+ let prefixedPathname = normalizedPathname;
11
+ if (basePath && normalizedPathname === basePath) {
12
+ prefixedPathname = "/";
13
+ } else if (basePath && normalizedPathname.startsWith(basePath + "/")) {
14
+ prefixedPathname = normalizedPathname.slice(basePath.length);
15
+ }
16
+ const firstSegment = prefixedPathname.split("/").find(Boolean);
17
+ return firstSegment && supportedLocales.includes(firstSegment) ? firstSegment : void 0;
44
18
  }
45
19
 
46
20
  export { getLocaleFromPathname };
@@ -1,21 +1,6 @@
1
- /**
2
- * Get locale candidate from URL query parameters.
3
- *
4
- * Extracts the value of the configured query key, without
5
- * validation or normalization.
6
- *
7
- * @example
8
- * ```ts
9
- * getLocaleFromQuery({ locale: "en" }, "locale")
10
- * // => "en"
11
- *
12
- * getLocaleFromQuery({}, "locale")
13
- * // => undefined
14
- */
15
1
  function getLocaleFromQuery(query, queryKey) {
16
- if (!query)
17
- return;
18
- return query[queryKey];
2
+ if (!query) return;
3
+ return query[queryKey];
19
4
  }
20
5
 
21
6
  export { getLocaleFromQuery };
@@ -4,75 +4,33 @@ import 'logry';
4
4
  import 'p-limit';
5
5
  import 'intor-translator';
6
6
 
7
- /**
8
- * Returns the internal canonical pathname.
9
- *
10
- * Canonical representation is the locale-neutral and deployment-neutral
11
- * internal routing form used for identity and routing computation.
12
- *
13
- * Guarantees:
14
- * - Pathname is normalized
15
- * - Deployment prefix (`basePath`) is removed
16
- * - Leading locale segment or `{locale}` placeholder is removed
17
- * - Only the first path segment is evaluated for locale stripping
18
- * - Result always starts with "/"
19
- * - Root is represented as "/"
20
- *
21
- * Accepts `{locale}` as a locale placeholder segment.
22
- *
23
- * @example
24
- * ```ts
25
- * // config.supportedLocales: ["en"]
26
- * // config.routing.basePath: "/app"
27
- * // config.routing.prefix: "all"
28
- * canonicalizePathname("/app/en/about", config);
29
- * // => "/about"
30
- *```
31
- */
32
7
  function canonicalizePathname(rawPathname, config) {
33
- const { routing, supportedLocales } = config;
34
- const normalizedPathname = normalizePathname(rawPathname);
35
- // ---------------------------------------------------------------------------
36
- // Strip basePath (deployment prefix)
37
- // ---------------------------------------------------------------------------
38
- const basePath = routing.basePath === "/" ? "" : routing.basePath;
39
- let path = normalizedPathname;
40
- if (basePath) {
41
- if (path === basePath) {
42
- path = "/";
43
- }
44
- else if (path.startsWith(basePath + "/")) {
45
- path = path.slice(basePath.length);
46
- }
8
+ const { routing, supportedLocales } = config;
9
+ const normalizedPathname = normalizePathname(rawPathname);
10
+ const basePath = routing.basePath === "/" ? "" : routing.basePath;
11
+ let path = normalizedPathname;
12
+ if (basePath) {
13
+ if (path === basePath) {
14
+ path = "/";
15
+ } else if (path.startsWith(basePath + "/")) {
16
+ path = path.slice(basePath.length);
47
17
  }
48
- // ---------------------------------------------------------------------------
49
- // Detect first segment (allocation-minimized)
50
- // ---------------------------------------------------------------------------
51
- if (path === "/")
52
- return "/";
53
- const segmentStart = 1; // skip leading "/"
54
- const nextSlash = path.indexOf("/", segmentStart);
55
- const firstSegment = nextSlash === -1
56
- ? path.slice(segmentStart)
57
- : path.slice(segmentStart, nextSlash);
58
- // ---------------------------------------------------------------------------
59
- // Determine if first segment is locale representation
60
- // ---------------------------------------------------------------------------
61
- let localeLength;
62
- if (firstSegment === LOCALE_PLACEHOLDER) {
63
- localeLength = firstSegment.length;
64
- }
65
- else if (supportedLocales.includes(firstSegment)) {
66
- localeLength = firstSegment.length;
67
- }
68
- // ---------------------------------------------------------------------------
69
- // Strip locale segment (if any)
70
- // ---------------------------------------------------------------------------
71
- if (localeLength !== undefined) {
72
- const stripped = path.slice(localeLength + 1);
73
- return stripped || "/";
74
- }
75
- return path;
18
+ }
19
+ if (path === "/") return "/";
20
+ const segmentStart = 1;
21
+ const nextSlash = path.indexOf("/", segmentStart);
22
+ const firstSegment = nextSlash === -1 ? path.slice(segmentStart) : path.slice(segmentStart, nextSlash);
23
+ let localeLength;
24
+ if (firstSegment === LOCALE_PLACEHOLDER) {
25
+ localeLength = firstSegment.length;
26
+ } else if (supportedLocales.includes(firstSegment)) {
27
+ localeLength = firstSegment.length;
28
+ }
29
+ if (localeLength !== void 0) {
30
+ const stripped = path.slice(localeLength + 1);
31
+ return stripped || "/";
32
+ }
33
+ return path;
76
34
  }
77
35
 
78
36
  export { canonicalizePathname };